《TCP/IP协议详解:卷一》读书笔记---IP、UDP、TCP协议基础

来源:互联网 发布:apache windows 编辑:程序博客网 时间:2024/06/03 19:15

IP:网际协议

不可靠:不能保证IP数据报能成功地到达目的地,仅提供最好的的传输服务。

无连接:IP并不维护任何关于后续数据报的状态信息。每个数据报的处理的相互独立。


IP首部

普通的IP首部长为20个字节,除非含有选项字段。


包含的字段:

4位版本、4位首部长度、8位服务类型、16位总长度(字节数)、16位标识、3位标志(分片所用)、13位片偏移(分片所用)、8位生存时间(TTL)、8位协议(ICMP、IGMP、TCP、UDP、EGP等等)、16首部检验和、32位源IP地址、32位目的IP地址、选项(如果有)


最左边为最高位,以大端方式传送(网络字节序)。


PS:Ping程序利用ICMP回显请求报文,Traceroute程序利用ICMP报文和IP首部中的TTL字段。



UDP:用户数据报协议

UDP是一个简单的面向数据报的运输层协议:进程的每个输出操作都正好产生一个UDP数据报,并组装成一份待发送的IP数据报。(不可靠、无连接)



UDP首部

大小为8个字节。


包含的字段

16位源端口号、16位目的端口号、16位UDP长度、16位UDP检验和






TCP:传输控制协议


TCP的服务:

TCP提供一种面向连接的、可靠的字节流服务。

TCP通过下列方式来提供可靠性:

  • 应用数据被分割成TCP认为最适合发送的数据块(字节流服务)。
  • 当TCP发出一段后,它启动一个定时器,等待目的端确认收到这个报文段。如果不能及时收到一个确认,将重发这个报文段。
  • 当TCP收到发自TCP连接另一端的数据,它将发送一个确认。这个确认不是立即发送,通常将推迟几分之一秒(经爱时延的确认)。
  • TCP将保持它首部和数据的检验和
  • TCP将对收到的数据进行重新排序,将收到的数据以正确的顺序交给应用层。
  • TCP的接收端必须丢弃重复的数据。
  • TCP提供流量控制。


TCP的首部

大小为20个字节。


包含的字段

16位源端口号、16位目的端口号32位序号32位确认序号、4位首部长度、16位窗口大小、16检验和、16紧急指针





TCP连接的建立与终止


建立连接协议

1、请求端发送一个SYN段指明客户打算连接的服务器的端口,以及初始化序号(ISN)。这个SYN段为报文段1.

2、服务器发回包含服务器初始序号的SYN报文段(报文段2)作为应答。同时,将确认序号设置为客户的ISN加1以对客户的SYN报文段进行确认。一个SYN将占用一个序号。

3、客户必须将确认序号设置为服务器的ISN加1以对服务器的SYN报文段进行确认(报文段3)

这三个报文段完成连接的建立。这个过程也称为三次握手(three-way handshake)。





连接终止协议(4次白握手)

1、应用程序关闭,TCP客户端发送一个FIN,用来关闭从客户到服务器的数据传送。

2、服务器收到这个FIN,它发回一个ACK,确认序号为收到的序号加1。同时TCP服务器还向应用程序传送一个文件结束符。

3、当服务器程序需要关闭从服务器到客户的数据传送时,会导致它的TCP端发送一个FIN。

4、客户必须对3中的FIN发回一个确认,并将确认序号设置为收到序号加1。



TCP状态变迁图



2MSL等待状态

TIME_WAIT状态也称为2MSL等待状态。每个具体TCP实现必须选择一个报文段最大生存时间MSL(Maximum Segment Lifetime)。它是任何报文段被丢弃在网络内的最长时间。


为什么客户端在TIME_WATI状态必须等待2MSL的时间呢?这有两个理由。

第一,为了保证客户端发送的最后一个ACK报文段能够到达服务器。这个ACK报文段有可能丢失,因而使处在LAST_ACK状态的服务器收不到对已发送的FIN+ACK报文段的确认。服务器会超时重传这个FIN+ACK报文段,而客户端就能在2MSL时间内收到这个重传报文段。

第二,防止“已失效的连接请求报文段”出现在本连接中。客户端在发送完最后一个ACK报文段后,再经过时间2MSL,就可以使本连接持续的时间内所产生的所有报文段都从网络消失(寿命为MSL)。这样就可以使下一个新的连接中不会出现这种旧的连接请求报文段。

详见《计算机网络 5th》--谢希仁 编著


未完待续。。。。。。




原创粉丝点击