C++必知必会复习(五)

1、OSI七层,TCP/UDP,telent属于哪一层:

(1)OSI七层:

应用层(文件传输) Telent,HTTP,FTP,NFS,SMTP,SNMP,DNS,TFTP
表示层(数据格式,代码转换,数据加密没有协议)  
会话层(接触或建立与别的接点的联系,没有协议)  
传输层 TCP,UDP,SPX(提供端到端的接口)
网络层(为数据包选择路由) IP,IPX,ICMP,RIP,OSPF,BGP,IGMP
数据链路层(传输有地址的帧错误检测功能) ATM,FDDI/SLIP,CSLIP,PPP,ARP,RAPP,MTU
物理层(以二进制数据形式在物理层媒体上传输数据) RJ45.802.3,ISO2110,IEEE802
(2)TCP/IP五层模型协议

应用层  
传输层 四层交换机,也有工作在四层的路由器
网络层 路由器,三层交换机
数据链路层 网桥,以太网交换机(二层交换机),网卡
物理层 中继层,集线层,还有双绞线

(3)TCP/UDP协议

TCP:它是事先为所发送的数据开辟出连接好的通道,然后进行数据发送

UDP:不为IP提供可靠性,流控或差错恢复功能

TCP支持协议:telent,FTP,SMTP

UDP支持协议:NFS(网络文件系统),SNMP(简单网络管理系统协议),DNS(主域名称系统),TFTP(通用文件传输协议)


2、TCP的连接和断开的过程:

(1)连接(三次握手)


第一次握手:Client将标志位SYN置为1,随机产生一个值Seq=J,并将该数据包发送给Server,Client进入SYN_SENT状态,等待Server.

第二次握手:Server收到数据包后由标志位SYN=1,知道Client请求建立连接,将标志位SYN和ACK都置为1,ack=J+1,随机产生一个值Seq=k,并将该数据包发送给Client确认连接请求,Server进入SYN_RCVD状态。

第三次握手:Client收到确认后,检查ack是否为J+1,ACK是否为1,并将该数据包发送给Server,Server检查ack是否为K+1,ACK是否为1,如果正确则建立成功,Client和Server进图ESTABLISHED状态。

完成三次握手后,随后进入Client与Server之间可以开始传输数据。

(2)TCP断开连接(四次挥手)


第一次挥手:Client发送一个FIN,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态。

第二次挥手:Server收到FIN后,发送一个ACK给Client,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),Server进入CLOSE_WAIT状态。

第三次挥手:Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态。

第四次挥手:Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK到Server,确认序号为收到的+1,Server进入CLOSED状态,完成四次挥手。


3、TCP如何进行流量控制?

所谓流量控制就是让这发送速率不要过快,让接收方来得及接收。利用滑动窗口机制就可以实施流量控制。

原理:运用TCP报文段中的窗口大小字段来控制,发送方的发送窗口不可以大于接收方的窗口大小。

考虑一种特殊的情况,就是接收方若没有缓存足够使用,就会发送窗口大小的报文,此时发送将发送窗口置为0,停止发送数据。之后接收方由足够的缓存,发送了非窗口大小的报文,但是这个报文中途丢失的,那么发送方的发送窗口就一直为0,导致锁死。

解决问题:TCP为每一个连接设置一个持续计时器。只要TCP一方收到对方0窗口通知,就启动该计时器。周期性的发送一个窗口探测报文段。对方就在确认这个报文的时候出现的窗口大小(TCP规定,即使设置为0窗口,也必须接收以下几种报文段:0窗口探测报文段,确认报文段和携带紧急数据报文段)。


猜你喜欢

转载自blog.csdn.net/u014252478/article/details/80231270