第一章 概述 第二章 物理层 第三章 数据链路层 第四章 网络层 第五章 传输层 第六章 应用层
运输层向它上面的应用层提供通信服务它属于面向通信部分的最高层,同时也是用户功能中的最低层
为应用进程之间提供端到端的逻辑通信
TCP/IP 的传输层有两个不同的协议:
(1) 用户数据报协议 UDP (User Datagram Protocol)
(2) 传输控制协议 TCP (Transmission Control Protocol)
三类端口
UDP 只在 IP 的数据报服务之上增加了很少一点的功能,即端口的功能和差错检测的功能
特点:
数据帧格式
特点
注意:
通过ARQ(Automatic Repeat reQuest)协议实现自动重传
TCP 连接的每一端都必须设有两个窗口——一个发送窗口和一个接收窗口
采用累积确认,即为确认当前分组的同时表明到这个分组为止的所有分组都已正确收到了
如果发送方发送了前 5 个分组,而中间的第 3 个分组丢失了。这时接收方只能对前两个分组发出确认。发送方无法知道后面三个分组的下落,而只好把后面的三个分组都再重传一次
套接字 socket = (IP地址: 端口号) 每一条 TCP 连接唯一地被通信两端的两个端点(即两个套接字)所确定
为什么客户端最后还要等待2MSL?
MSL(Maximum Segment Lifetime),TCP允许不同的实现可以设置不同的MSL值。 第一,保证客户端发送的最后一个ACK报文能够到达服务器,因为这个ACK报文可能丢失,站在服务器的角度看来,我已经发送了FIN+ACK报文请求断开了,客户端还没有给我回应,应该是我发送的请求断开报文它没有收到,于是服务器又会重新发送一次,而客户端就能在这个2MSL时间段内收到这个重传的报文,接着给出回应报文,并且会重启2MSL计时器。 第二,防止类似与“三次握手”中提到了的“已经失效的连接请求报文段”出现在本连接中。客户端发送完最后一个确认报文后,在这个2MSL时间中,就可以使本连接持续的时间内所产生的所有报文段都从网络中消失。这样新的连接中不会出现旧连接的请求报文。 为什么建立连接是三次握手,关闭连接确是四次挥手呢? 建立连接的时候, 服务器在LISTEN状态下,收到建立连接请求的SYN报文后,把ACK和SYN放在一个报文里发送给客户端。 而关闭连接时,服务器收到对方的FIN报文时,仅仅表示对方不再发送数据了但是还能接收数据,而自己也未必全部数据都发送给对方了,所以己方可以立即关闭,也可以发送一些数据给对方后,再发送FIN报文给对方来表示同意现在关闭连接,因此,己方ACK和FIN一般都会分开发送,从而导致多了一次。