计算机网络面试必备(二)

TCP3次握手,4次关闭

TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接。

下面是一些名词解释(PS:ACK、SYN和FIN等大写单词表示标志位,取值只能是0或1ack、seq小写的单词表示序号):

    位码即TCP标志位,有6种标示:SYN(synchronous建立联机)、ACK(acknowledgement 确认)、PSH(push传送)、FIN(finish结束)、RST(reset重置)、URG(urgent紧急)。

    同步SYN:连接建立时用于同步序号。当SYN=1,ACK=0时表示:这是一个连接请求报文段。若同意连接,则在响应报文段中使得SYN=1,ACK=1。因此,SYN=1表示这是一个连接请求,或连接接受报文。SYN这个标志位只有在TCP建产连接时才会被置1,握手完成后SYN标志位被置0。

    ACK:占1位,仅当ACK=1时,确认号字段才有效。ACK=0时,确认号无效 。

    终止FIN:用来释放一个连接。FIN=1表示:此报文段的发送方的数据已经发送完毕,并要求释放运输连接 。

    序号Sequence number(顺序号码)/Seq序号,占32位,用来标识从TCP源端向目的端发送的字节流,发起方发送数据时对此进行标记。

    确认号Acknowledge number,ack序号,占32位,只有ACK标志位为1时,确认号字段才有效,ack=Seq+1

(1)为什么要等待2MSL呢?    

     MSL即Maximum Segment Lifetime,也就是最大报文生存时间,他是任何报文在网络上存在的最长时间,超过这个时间报文将被丢弃。引用《TCP/IP详解》中的话:“它(MSL)是任何报文段被丢弃前在网络内的最长时间”。RFC 793中规定MSL为2分钟,实际应用中常用的是30秒,1分钟和2分钟等。

(2)为什么TCP释放连接需要四次?    

   TCP建立连接要进行三次握手,而断开连接要进行四次。这是由于TCP的半关闭造成的。因为TCP连接是全双工的(即数据可在两个方向上同时传递)所以进行关闭时每个方向上都要单独进行关闭。这个单方向的关闭就叫半关闭。当一方完成它的数据发送任务,就发送一个FIN来向另一方通告将要终止这个方向的连接。

 

丢包、粘包

    UDP丢包是因为数据包在传送过程中丢失了,而TCP是基于流式的发送,并且存在丢包重发机制,TCP是可靠连接而UDP是不可靠的。关于TCP的粘包,正是由于TCP是流式传送的,也就是连接建立后可以一直不停的发送,并没有明确的边界定义,而你用UDP发送的时候,是可以按照一个个数据包去发送的,一个数据包就是一个明确的边界。

    所以丢包是针对UDP,粘包是针对TCP。

    粘包,是指发送端发送的两个报文,在接收端被拼在一起。TCP会开辟一个缓冲区,发送端往其中写入数据,每过一段时间就发送出去,然后接收端接收到这些数据 。由于TCP是面向流的协议,报文与报文之间是没有分界符号的。在接收端,所有的数据都逻辑上拼在一起给你。举例来说,你分10次发送10个长度为10的报文,在接收端,你可能只收到一个长度为100的报文,而不会收到10个消息。为了解决这个问题,你必须在接收端有能力把这些报文分隔开来。如果消息长度总是固定的,这就比较容易,只要按长度取出即可。如果长度不固定,一般有两种方法解决:
    ●使用特征字节。例如:如果是聊天程序,发送的是普通文本,一些字符是绝对不可能出现在正文中的,你可以使用这些字符做分隔符隔离不同消息。我们可以使用'\0'做分隔,一般对于全文本传输是比较安全的。
    ●在发送方发送正文前,先发送一个长度。例如你要发送2345字节的内容,你可以先发送一个2字节的长度给对方,然后再发正文。接收放只要收到这个长度信息,就可以正确的分包。需要注意的,到底用多少字节来发送长度是应该预先约定的,一般2字节就足够,不过你约定4字节也是可以的。还要注意的是,如果接收一次报文后,解包完毕还剩下一部分内容,这些内容应该留给下次报文分包使用,而不能扔掉。

     注:粘包的情况是无法绝对避免的,因为网络环境是很复杂的,依赖发送和接收缓冲区的控制是不能保证100%的,只要在发送的数据中说明数据的宽度,随后在接收部分按照这个宽度拆开就OK了。宽度全都是统一的已知宽度的情况下拆开更加容易,连在发送端填入宽度数据都可以省去了。

UDP是无连接的,面向消息的数据传输协议,与TCP相比,有两个致命的缺点,一是数据包容易丢失,二是数据包无序

丢包具体问题分析   

  ● 发送频率过高导致丢包:   

       很多人会不理解发送速度过快为什么会产生丢包,原因就是UDP的SendTo不会造成线程阻塞,也就是说,UDP的SentTo不会像TCP中的SendTo那样,直到数据完全发送才会return回调用函数,它不保证当执行下一条语句时数据是否被发送。(SendTo方法是异步的)这样,如果要发送的数据过多或者过大,那么在缓冲区满的那个瞬间要发送的报文就很有可能被丢失。至于对”过快”的解释,作者这样说:”A few packets a second are not an issue; hundreds or thousands may be an issue.”(一秒钟几个数据包不算什么,但是一秒钟成百上千的数据包就不好办了)。 要解决接收方丢包的问题很简单,首先要保证程序执行后马上开始监听(如果数据包不确定什么时候发过来的话),其次,要在收到一个数据包后最短的时间内重新回到监听状态,其间要尽量避免复杂的操作(比较好的解决办法是使用多线程回调机制)。   

  ● 报文过大丢包 :  

     至于报文过大的问题,可以通过控制报文大小来解决,使得每个报文的长度小于MTU。以太网的MTU通常是1500 bytes,其他一些诸如拨号连接的网络MTU值为1280 bytes,如果使用speaking这样很难得到MTU的网络,那么最好将报文长度控制在1280 bytes以下。   

   ● 发送方丢包 :  

    内部缓冲区(internal buffers)已满,并且发送速度过快(即发送两个报文之间的间隔过短);  接收方丢包:Socket未开始监听;  虽然UDP的报文长度最大可以达到64 kb,但是当报文过大时,稳定性会大大减弱。这是因为当报文过大时会被分割,使得每个分割块(翻译可能有误差,原文是fragmentation)的长度小于MTU,然后分别发送,并在接收方重新组合(reassemble),但是如果其中一个报文丢失,那么其他已收到的报文都无法返回给程序,也就无法得到完整的数据了。 

 

流量控制、拥塞控制

流量控制和拥塞控制是有区别的:

流量控制——控制双方的传送速率在双方可以接受的范围内。

拥塞控制——描述的是整个网络的状态,通过是否重传以及传输速率的大小去感知网络的拥塞情况,进而进行调整,达到恢复网络的目的。(感知整体网络,通过控制每一个个体去fix网络状况)。

https://www.cnblogs.com/gaopeng527/p/5255757.html

 

子网划分

https://blog.csdn.net/qq_37933685/article/details/79063219

https://blog.csdn.net/gui951753/article/details/79412524

 

IPV4和IPV6

    如今,IPv4的地址远远不能满足人们的需求。随着移动互联网的不断发展,人们可能会有好几个移动终端,每一个终端都需要一个地址。互联网的飞快发展对IP地址的资源需求更加强烈。加上逐渐成熟的云计算,也加剧了IP地址匮乏资源短缺的压力。

     IPv6的地址分配一开始就遵循聚类(Aggregation)的原则,这使得路由器能在路由表中用一条记录(Entry)表示一片子网,大大减小了路由器中路由表的长度,提高了路由器转发数据包的速度。 IPv6最大的优点是增大了地址空间。中国学生人数较多,几乎达到了美国的总人口数,有句笑话是“中国一打铃,全美国都上课”,因此,教育网的发展是非常关键的。

    IPv6的制约因素: 一是采用私有地址转换,这是解决IP地址短缺的权宜之计,不利于保障网络服务质量和网络安全,影响我国互联网长远发展;二是缺少IPv6信息资源;三是网络安全防护现状,防火墙管理控制,制约了IPv6发展。重要的还有:IPv4和IPv6理论上不兼容,所以互联互通技术有待发展。

    IPV4向IPV6的过渡主要有两种方法: ( 1)双栈技术:主机或路由器同时装有IPV4和IPV6两个协议栈,因此主机既能和IPV4通 信,  也能和IPV6通信。 (2)隧道技术:在IPV6分组进入IPV4网络时,将IPV6分组封装成IPV4分组; 当 封装成IPV4分组 离开IPV4网络时,再装数据部分(IPV6部分)转发给目的节点。

https://www.cnblogs.com/xiaomayizoe/p/5258584.html

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值