前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >TCP/IP协议

TCP/IP协议

作者头像
用户2909867
发布2018-08-22 11:14:13
4300
发布2018-08-22 11:14:13
举报
文章被收录于专栏:互联网大杂烩互联网大杂烩

TCP/IP协议

TCP/IP协议概述

TCP/IP协议并不完全符合OSI的七层参考模型。传统的开放式系统互连参考模型,是一种通信协议的7层抽象的参考模型,其中每一层执行某一特定任务。该模型的目的是使各种硬件在相同的层次上相互通信。这7层是:物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。而TCP/IP通讯协议采用了4层的层级结构,每一层都呼叫它的下一层所提供的网络来完成自己的需求。这4层分别为: 应用层:应用程序间沟通的层,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等。 传输层:在此层中,它提供了节点间的数据传送,应用程序之间的通信服务,主要功能是数据格式化、数据确认和丢失重传等。如传输控制协议(TCP)、用户数据报协议(UDP)等,TCP和UDP给数据包加入传输数据并把它传输到下一层中,这一层负责传送数据,并且确定数据已被送达并接收。 互连网络层:负责提供基本的数据封包传送功能,让每一块数据包都能够到达目的主机(但不检查是否被正确接收),如网际协议(IP)。 链路接口层:接收IP数据报并进行传输,从网络上接收物理帧,抽取IP数据报转交给下一层,对实际的网络媒体的管理,定义如何使用实际网络(如Ethernet、Serial Line等)来传送数据。

TCP/IP层次结构图 .png

网络层协议(IP协议)

IP协议是网络层的主要协议,是Internet最重要的协议。在IP协议中规定了在Internet上进行通信时应遵守的规则。例如IP数据包的组成、路由器如何将IP数据包送到目的主机等。IP协议在主机和网络之间寻址和路由数据包。IP是一个无连接的协议,主要负责在主机间寻址并为数据包设定路由,在交换数据前它并不建立会话。因为它不保证正确传递。另一方面,数据在被收到时,IP不需要收到确认,所以它是不可靠的。 IP层接收由更低层(网络接口层例如以太网设备驱动程序)发来的数据包,并把该数据包发送到更高层——TCP或UDP层;相反,IP层也把从TCP或UDP层接收来的数据包传送到更低层。IP数据包中含有发送它的主机的地址(源地址)和接收它的主机的地址(目的地址)。 IP协议的数据格式如下:

网际协议IP数据格式.png

版本号:协议的版本号,不同版本的协议格式或语言可能不同,现在常用的是IPV4。 生存时间(Time To Live,TTL):8bit,即IP分组在IP网络中的寿命。 协议(Protocol):8bit,指明IP分组中数据字段携带的是哪种高层协议的数据。 首部检查和(header checksum):16bit。此字段只用于检查IP分组的首部,不包括数据字段。 源IP地址(source IP address):32bit,填入源主机的IP地址。 目标IP地址(destination IP address):32bit,填入目标主机的IP地址。 可选字段(IP options):可选,可变长,1字节-40字节,但加上填充字段(填充0)后两个字段长度必须为4Bytes的整数倍。 IP地址标识着网络中一个系统的位置。我们知道每个IP地址都是由两部分组成的:网络号和主机号。其中网络号标识一个物理的网络,同一个网络上所有主机需要同一个网络号,该号在互联网中是唯一的;而主机号确定网络中的一个工作端、服务器、路由器及其它TCP/IP客户端。对于同一个网络号来说,主机号是唯一的。每个TCP/IP主机由一个逻辑IP地址确定。

传输层协议(TCP和UDP)

1.TCP协议 传输控制协议TCP是一种面向连接(连接导向)的、可靠的、基于字节流的运输层通信协议,由IETF的RFC 793说明。它在传送数据时是分段进行的,主机交换数据必须建立一个会话。它用比特流通信,即数据被作为无结构的字节流。通过每个TCP传输的字段指定顺序号,以获得可靠性。如果一个分段被分解成几个小段,接收主机会知道是否所有小段都已收到。通过发送应答,用以确认别的主机收到了数据。对于发送的每一个小段,接收主机必须在一个指定的时间返回一个确认。如果发送者未收到确认,数据会被重新发送;如果收到的数据段损坏,接收主机会舍弃它,因为确认未被发送,发送者会重新发送分段。TCP端口为信息的传送指定端口,端口号小于256的定义为常用端口。 下图展示了TCP首部的数据格式。如果不计任选(Options)字段,那么,它的大小是20个字节。

TCP包头格式.png

TCP协议通过三个报文段完成连接的建立,这个过程称为三次握手(three-way handshake),过程如下图所示。 (1)客户机向服务器发送一个TCP数据包,表示请求建立连接。 (2)服务器收到了数据包,知道这是一个建立请求的连接,服务器也通过发回具有以下项目的数据包表示回复:同步标志置位、即将发送的数据段的起始字节的顺序号、应答并带有将收到的下一个数据段的字节顺序号。 (3)客户机收到了服务器的TCP,知道是从服务器来的确认信息。于是客户机也向服务器发送确认信息。至此客户端完成连接。 (4)服务器收到确认信息,也完成连接。

TCP建立连接(三次握手) .png

TCP协议建立一个连接需要三次握手,而终止一个连接要经过四次握手,这是由TCP的半关闭(half-close)造成的。具体过程如下图所示。

TCP断开连接 .png

2.UDP协议 UDP 是User Datagram Protocol的简称,中文名是用户数据包协议,是 OSI 参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。 用户数据报协议UDP提供了无连接的数据报服务。它适用于无须应答并且通常一次只传送少量数据的应用软件。

Socket编程

Socket简介

Socket接口是TCP/IP网络的API。Socket接口定义了许多函数或例程,程序员可以用它们来开发TCP/IP网络上的应用程序。要学习Internet上的TCP/IP网络编程,必须理解Socket接口。    Socket接口设计者最先是将接口放在Unix操作系统里面的。如果了解Unix系统的输入和输出的话,就很容易了解Socket了。网络的 Socket数据传输是一种特殊的I/O,Socket也是一种文件描述符。Socket也具有一个类似于打开文件的函数调用Socket(),该函数返回一个整型的Socket描述符,随后的连接建立、数据传输等操作都是通过该Socket实现的。常用的Socket类型有两种:流式Socket (SOCK_STREAM)和数据报式Socket(SOCK_DGRAM)。流式是一种面向连接的Socket,针对于面向连接的TCP服务应用;数据报式Socket是一种无连接的Socket,对应于无连接的UDP服务应用。

Socket创建

为了创建Socket,程序可以调用Socket函数,该函数返回一个类似于文件描述符的句柄。socket函数原型为:

代码语言:javascript
复制
ServerSocket serverSocket = null;
     int port = 8080;
     try {
     //服务器套接字对象
     serverSocket = new ServerSocket(port, 1, InetAddress.getByName("127.0.0.1"));
     } catch (IOException e) {
     e.printStackTrace();
     System.exit(1);
     } 

Socket描述符是一个指向内部数据结构的指针,它指向描述符表入口。调用Socket函数时,socket执行体将建立一个Socket,实际上"建立一个Socket"意味着为一个Socket数据结构分配存储空间。Socket执行体为你管理描述符表。 两个网络程序之间的一个网络连接包括五种信息:通信协议、本地协议地址、本地主机端口、远端主机地址和远端协议端口。Socket数据结构中包含这五种信息。

Socket配置

通过socket调用返回一个socket描述符后,在使用socket进行网络传输以前,必须配置该socket。面向连接的socket客户端通过调用Connect函数在socket数据结构中保存本地和远端信息。无连接socket的客户端和服务端以及面向连接socket的服务端通过调用 bind函数来配置本地信息。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017.08.06 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • TCP/IP协议
    • TCP/IP协议概述
      • 网络层协议(IP协议)
        • 传输层协议(TCP和UDP)
        • Socket编程
          • Socket简介
            • Socket创建
              • Socket配置
              领券
              问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档