1.TCP如何提供可靠的数据传输?
1.序列号和确认应答机制:每个tcp报文都包含一个序列号,用于标识连续数据流中最后一个字节的位置。在接收方确认应答报文中会将下一次期望接收到的序列号发送回发送方即确认号(接受的数据字节序+1)。如果发送方在规定时间内没有收到确认应答,将会重发该报文。
2.重传机制:如果一个报文段没有得到确认,则发送方会重新发送该报文段。
3.流量控制:tcp接收方可以限制发送发发送数据的速率,以避免接收方无法处理大量数据。
4拥塞控制:TCP会检测网络中的拥塞情况,并调整发送数据的速率,避免网络拥塞。
4.校验和:发送的数据包二进制相加然后取反。目的是检验数据在传输中的变化。如果收到段的数据检验和有差错,TCP将丢弃这个报文段和不确认收到此报文。
2.四次挥手为什么主动关闭方会有一个2MSL的TIME_WAIT状态?
答:主动关闭方在收到被动关闭方的FIN包后并返回ACK后,会进入TIME_WAIT状态。
防止新建立的连接使用原来的socket,迟到的报文到达后被错位接受了。在2MSL(报文最大存活时间)内,本次连接的socket(客户端ip和端口,服务器ip和端口)不能再被使用,这样迟到的报文会被丢弃。
大量短连接带来大量TIME_WAIT,解决方法,设置tcp_tw_recycle =1实现socket快速回收;主动关闭连接方进入TIME_WAIT,一般服务器端不主动关闭连接。HTTP请求connection参数,一般设置为keep-alive.
服务端不进行连接,最多可以三次握手建立多少连接?
Int listen(socketfd, int backlog);
socketfd:监听套接字描述符;
backlog: 内核已经完成三次握手建立连接的队列的大小;
如果服务端应用层不进行accept获取新连接,最多可以三次握手完成backlog+1次连接。
UDP能发送最大数据是多少?
UDP首部长度为固定8字节,分别是源端口,目的端口,udp数据包长度,校验和,每一部分都是2字节即16位,数据包最大长度是2^16=65536字节(包含头部8字节),减去头部,数据最多是65528字节。
当应用层准备发送的数据长度超过一个udp最大传输长度该怎么办?
在应用层将要发送数据分片为符合udp大小的数据包,分别传输,到接受方进行组合。每个分片需要加上标识符以便进行正确的组装。
标识:哪个应用层数据包、数据包序号、该分片后还有无分片、总数据包的大小
3 什么是粘包,怎么设计避免粘包?
TCP为了减小额外开销,采取字节流式传输,所以接收端可能一次接受多个包。TCP粘包就是发送方若干个数据包到达接收方的时候,多个包首尾相连粘成一个包,无法区分。tcp协议数据传输基于字节流,不包含消息,数据包的概念,需要应用层协议自己设计消息边界。
造成粘包三个原因:
1.发送端等待缓冲区满才发送
2.接收方来不及接受缓冲区的数据;
3.TCP协议发送较小的数据包的时候,会将几个包合并成一个包发送
避免粘包的措施:
1.编程强制TCP发送数据,不等缓冲区满;
2.优化接收方接受数据的过程,使其来得及接受数据包;设置固定长度报文,设置报文头部指示报文长度
3.发送端将每个包设置成相同大小,不够补0;
4.将消息分为头部和消息体,在头部中保存整个消息的长度,只有读取到足够长度的消息后才算是读到了一个完整的消息。
4 三次握手,为什么多了第三次?
答:TCP协议中主动发起请求的一方称为客户端,被动连接到一方称为服务端。不管是客户端还是服务端,tcp连接都能发送和接收数据。
第一次握手:首先client给server发送请求报文(SYN报文),这个报文中,包含了SYN=1,客户端随机选择的初始序号seq为client_isn,发送之后处于SYN-SENT状态。
第二次握手:Server接收到了这个请求,分配资源,并给Client返回一个
SYNACK报文,其中标志位SYN和ACK都为1,服务器自己初始序号seq为server_isn;而小ack为client_seq+1,此时,服务端处于SYN-RCVD状态。
第三次握手;client接收到server发送的ACK消息后,发现ack是client_seq+1,表明server收到了消息,也给server回一个ACK报文,包含了ACK=1,ack=server_isn+1和初始序号seq为client_isn+1。
三次握手之后,连接建立
为什么需要第三次握手?
答:如果使用两次握手的话,服务器不能确认客户端的接受能力。
黑客可能使用大量伪造SYN请求发送给服务器(SYN泛洪攻击),如果只有两次握手,服务器端立即建立连接分配资源,大大浪费服务器端口。
服务器返回给客户端的ACK数据包可能在传输过程中丢失,而客户端没有收到ACK数据包拒绝接受服务器发送的数据,于是服务器一直在发送,客户端一直在拒绝,形成死锁。
[外链图片转存失败,源站可能有防盗在这里插入!链机制,建描述]议将图片上https://传(imblog.csdnimg.cn/081397dfShkk164fed8ca79bef858420ab.png)https://imgblog.csdnimg.cn/081397ddaf164fed8ca79bef825840ab.png)]
5.TCP三次握手时的第一次的seq序号是怎样产生的 ?
答:第一次序号是随机序号,使用一个isn算法得到。
6.四次挥手是哪四次?多了哪一次?为什么?
TCP连接是全双工的,四次挥手中,前两次用于断开一个方向的了连接,后两次用于断开另一方向的连接。断开连接一般是客户端主动,服务器端被动。
第一次挥手:当client没有数据要发送给server,他就会发送一个FIN报文,进入FIN_WAIT_1
第二次挥手:server收到client发送的FIN报文,发送ACK信息,并且ack=seq+1,server进入CLOSE_WAIT状态,client收到后进入FIN_WAIT_2阶段
第三次挥手:当server发送完所有数据,给client发送一个FIN报文,server进入LAST_ACK状态
第四次挥手:client接受到FIN报文,给server发送ACK信息,进入TIME_WAIT状态,server收到ACK信息后,关闭连接,处于CLOSED状态,client等待2MSL后还没收到消息,即server已将关闭连接,client也断开连接。
为什么需要TIME_WAIT?
答:客户端最后一个ACK可能丢失,若丢失,服务端会重新发送FIN报文,client也重新发送ACK报文。
7.浏览器中输入网址后敲回车发生了什么?
1.首先是域名解析,客户端使用DNS协议将URL解析为对应的ip地址;浏览器缓存 -> 操作系统缓存->路由器缓存 -> DNS缓存 -> 根域名服务器
2.三次握手建立TCP连接;
3.HTTP连接,客户端向服务端发送HTTP请求连接(HTTP连接无需额外连接,基于已将建立的TCP连接)
4.客户端发送HTTP请求,服务器接受客户端HTTP请求,并返回响应
5.客户端收到HTTP响应,将结果渲染给用户;
URL(Uniform Resource Locator)统一资源定位符
DNS(Domain Name System)域名系统
ARP(Address Resolution Protocol)地址解析协议
是根据IP地址获取物理地址的一个TCP/IP协议。主机发送信息时将包含目标IP地址的ARP请求广播到局域网络上的所有主机,并接收返回消息,以此确定目标的物理地址;收到返回消息后将该IP地址和物理地址存入本机ARP缓存中并保留一定时间,下次请求时直接查询ARP缓存以节约资源。地址解析协议是建立在网络中各个主机互相信任的基础上的,局域网络上的主机可以自主发送ARP应答消息,其他主机收到应答报文时不会检测该报文的真实性就会将其记入本机ARP缓存;
8.TCP与UDP的区别?
可靠性:首先TCP是一个面向连接的协议,建立连接需要三次握手。他通过序列号确认,超时重传等机制提供数据的可靠传输或者故障可靠通知。
UDP是一个无连接的协议,不保证数据报会到达最终的目的地,不保证数据报达到的先后顺序,不会重传以及报告错误。
协议:每个udp数据包都有一个长度,数据报的长度随着数据一起发送给接收端;TCP是一个字节流传输协议,没有任何边界。
流量控制:
TCP提供流量控制,TCP总是告知对方,任何时刻他能一次性接受多少字节的数据。从而保证发送的数据不会使得接收缓冲区溢出。UDP不提供流量控制。
全双工:TCP是全双工的
UDP报文首部8字节,TCP首部20字节。
TCP快重传是怎么工作的?
发送方收到三次同样的确认号后会立即重传丢失的报文。
TCP超时重传时间RTO是固定的吗?
tcp超时重传时间是根据RTT报文往返时间计算得到的
9.HTTP协议与TCP的区别与联系
联系:HTTP协议建立在TCP协议基础之上的;
区别:HTTP是应用层协议定义的是数据的内容的规范;TCP是传输层协议,定义的是连接与数据传输的规范;
建立TCP连接需要三次握手,而HTTP建立在TCP连接之上,通常包含请求和响应两种。
10.HTTP/1.0和HTTP/1.1的区别?
HTTP/1.0只能保持短暂连接,浏览器每次请求都需要与服务器建立TCP连接,HTTP/1.1加入长连接,http请求报文中添加connection:keep_alive;减少了建立和关闭连接的消耗。
11.HTTP和HTTPS的区别?HTTPS中的 S是指什么?
HTTP超文本传输协议,信息明文传播,HTTPS经过SSL加密的HTTP协议。
HTTP和HTTPS使用完全不同的连接方式,端口也不一样,前者是80端口后者是443;
HTTP连接简单无状态;HTTPS协议是由SSL+HTTP协议构成更加安全;
HTTPS使用对称加密和非对称加密两个阶段,建立连接时使用非对称加密,连接建立后使用对称加密。