计算机网络的分层
- OSI七层:物理层,数据链路层,网络层,运输层,会话层,表示层,应用层。
- TCP/IP五层结构:物理层,数据链路层,网络层,传输层,应用层。
- TCP/IP四层结构:网络接口层,网络层,传输层,应用层。
运输层
作用:在主机之间提供可靠的进程通信。(使用网络层提供的主机数据通信服务)。
地位:是面向通信功能的最高层,和用户功能的最底层,仅存在于用户主机中。
运输层协议和网络层协议的主要区别
ip协议的作用范围:提供主机之间的逻辑通信。
TCP/UDP协议的作用范围:提供进程之间的逻辑通信。
运输层解决的问题:
- 复用/解复用:区分主机上的不同进程,端口机制。
- 差错控制:ip仅提供首部校验。
- 适应不同用户对网络的QOS需求:TCP/UDP。
- 对用户屏蔽下面的网络细节。
TCP和UDP的区别
- TCP(全双工 点到点):面向连接;流量控制、差错控制,拥塞控制,定时连接管理;可靠且按照次序交付;不支持多播和广播,开销大;基于字节流,消息的边界在端到端的传输中不能得到保留;传送的数据单位是TCP报文段。
- UDP:无连接;无拥塞控制;尽最大努力交付;支持多播和广播;保留应用程序的边界,不会合并两个以上的报文,也不会将一个应用报文分成几段;UDP传送的数据单位是UDP用户数据报。
TCP和UDP分别提供的服务
- TCP:Telnet(端口号:23),FTP(端口号:21),SMTP(端口号:25)
- UDP:TFTP( 文件传送协议 端口号:69),SNMP(网络管理协议 端口号:161),RIP(路由选择协议 端口号:520)
TCP的可靠传输技术
- TCP的数据编号与确认
- TCP的流量控制(点对点之间):利用滑动窗口机制实现流量控制,既可以让接收方来得及接收,也不会发生网络拥塞。
- TCP的拥塞控制(全局性过程,确保路由器或链路不至于过载):慢开始,拥塞避免,快重传,快恢复。
TCP的建立与释放(三次握手四次挥手)
- TCP连接的建立:三次握手
使双方确认对方的存在;允许双方进行参数协商;进行资源的分配。
1.第一次握手:A的TCP向B发送连接请求的报文段,首部的同步位SYN=1,并选择序号seq=x,表明传送数据时的第一个数据字节的序号是x。SYN置1的报文段不能携带数据,但要消耗一个序号。
2.第二次握手:B如果同意连接,就向A发送连接同意报文,使SYN=1,使ACK=1,其确认号ack=x+1,自己选择的序号seq=y。
3.第三次握手:A收到报文后向B确认,ACK=1,确认号ack=y+1,seq=x+1。 - TCP的连接释放:四次挥手
1.第一次挥手:数据传输结束后,通信双方都可以释放连接。现在假设A想B发送完数据要释放连接,A发送连接释放报文段,并停止再发送数据,主动关闭TCP连接。连接释放报文段的首部FIN=1,其序号seq=u,等待B的确认。
2.第二次挥手:B发出确认,ack=u+1,序号为seq=v。至此从A到B方向的连接就释放了,TCP处于半关闭状态,但B若要发送数据,A仍然要接收。
3.第三次挥手:如果B已经没有向A发的数据了,就可以释放连接。FIN=1,序号为w,ack仍为u+1。
4.第四次挥手:A收到连接释放报文必须发出确认,ACK置1,确认号ack=w+1,序号seq=u+1。
为什么是三次握手和四次挥手?
参考文章
为什么是三次握手而不是两次:为了确保没有失效的请求连接报文被确认的情况,如果A向B发送的连接请求长时间滞留,当A已经没有请求连接时到达了B ,B会认为A想要建立连接,同意了连接请求。这时如果只有两次握手,那么B就开始等待A传送数据了,但是此时A并没有要建立连接不会理会B,那么B就会陷入等待,浪费资源。
为什么是四次挥手:为了确保双方数据都发送完毕,A请求释放连接,只是表明A没有数据要发送给B了,并不代表B没有数据要发给A了,所以B会先发送一个报文表明自己已经知道A想要释放连接,此时TCP处于半关闭状态,等B的所有数据发完了,再向A发送释放连接请求表明自己也可以释放连接了,而此时A给B发送报文表示自己知道B已经发送完所有数据同意断开连接。如果是两次挥手会导致B的数据很可能发送不完整,如果是三次挥手会导致,B的报文万一滞留了,B已经断开了连接,而A还保持半关闭状态等待B的数据,所以最后一次的确认也很重要。