答案:
答案:
答案:
(1)服务器端函数:
????????(1)socket创建一个套接字
????????(2)bind绑定ip和port
????????(3)listen使套接字变为可以被动链接
????????(4)accept等待客户端的链接
????????(5)write/read接收发送数据
????????(6)close关闭连接
(2)客户端函数:
? ? ? ?(1)创建一个socket,用函数socket()
????????(2)bind绑定ip和port
????????(3)连接服务器,用函数connect()
????????(4)收发数据,用函数send()和recv(),或read()和write()
????????(5)close关闭连接
1.检验和:
????????通过检验和的方式,接收端可以检测出来数据是否有差错和异常,假如有差错就会直接丢弃TCP段,重新发送。TCP在计算检验和时,会在TCP首部加上一个12字节的伪首部。检验和总共计算3部分:TCP首部、TCP数据、TCP伪首部.
2.序列号/ 确认应答、超时重传
????????数据到达接收方之后,接收方会发送一个确认应答,表示已经收到数据段,并且确认序号会说明了它下一次需要接收的数据序列号,如果发送方没收到确认应答,那么发送方方会进行重发,这个等待时间一般是2*RTT(往返时间)+一个偏差值。
如果一个包多次重发没有收到接收端的确认包,就会强制关闭连接
3.窗口控制与重发控制/快速重传(重复确认应答)
????????TCP会利用窗口控制来提高传输速度,意思是在一个窗口大小内,不用一定等到应答才能发送下一段数据,窗口大小就是无需等待确认而可以继续发送数据的最大值,如果不使用窗口控制,每一个没收到应答的数据都要重发。
答案:
(1)滑动窗口协议是传输层进行流控的一种措施,接收方通过通告发送方自己的窗口大小,从而控制发送方的发送速度,从而达到防止发送方发送速度过快而导致自己被淹没的目的。滑动可以理解为缓冲区的大小,告诉发送方,自己还能接受多少数据
TCP的滑动窗口解决了端到端的流量控制问题,允许接受方对传输进行限制,直到它拥有足够的缓冲空间来容纳更多的数据。
(2)TCP在发送数据时会设置一个计时器,若到计时器超时仍未收到数据确认信息,则会引发相应的超时或基于计时器的重传操作,计时器超时称为重传超时(RTO)?。另一种方式的重传称为快速重传,通常发生在没有延时的情况下。若TCP累积确认无法返回新的ACK,或者当ACK包含的选择确认信息(SACK)表明出现失序报文时,快速重传会推断出现丢包,需要重传。
答案:
慢启动(Slow Start),是传输控制协议(TCP)使用的一种阻塞控制机制。慢启动也叫做指数增长期。慢启动是指每次TCP接收窗口收到确认时都会增长。增加的大小就是已确认段的数目。这种情况一直保持到要么没有收到一些段,要么窗口大小到达预先定义的阈值。如果发生丢失事件,TCP就认为这是网络阻塞,就会采取措施减轻网络拥挤。一旦发生丢失事件或者到达阈值,TCP就会进入线性增长阶段。这时,每经过一个RTT窗口增长一个段。
答案:
????????第一次:
????????作用:客户端确认自己可以发 ,服务器确认自己能收,客户端发送信息给服务器,服务器接受客户端信息 ????
????????第二次:
????????作用:客户端确认自己能收,服务器能发也能收 ????服务器确认自己能发服务器发送应答给客户端,客户端接收应答和报文
????????第三次:
????????作用:服务器确认客户端可以收到客户端应答服务器
第一次:客户端将标志位SYN设置为1,随机产生一个seq=x,并将该数据包发送给服务端,客户端进入SYN_SENT状态,等待服务端确认
第二次:服务端收到数据包后,由标志位SYN=1可知client请求连接,服务端将标志位SYN和ACK都置1,ack=x+1,并将该数据包发送给客户端确认连接请求,服务端进入SYN_RCVD状态
第三次:客户端收到确认后,检查ack是否为x+1,ACK是否为1,如果正确,将数据包发给服务端,服务端检查ACK是否为1,ack是否为y+1,如果是,则连接成功,服务器和客户端都进入ESTABLISHED
客户端发送FIN=1给客户端,告诉服务端数据已经发送完毕,请求终止连接,此时客户端不能发送数据(不包括协议,比如应答这些),但还能接收数据,
服务端接受FIN包之后给客户端回一个ACK包告诉它自己已经收到,此时没有断开socket连接,而是等待剩下的数据传输完成
服务端等待数据传输完毕之后,向客户端发送FIN包,表明可以断开连接
客户端收到后,回应一个ACK包表明已经收到,等待一段时间,确保服务端没有数据再发来,然后彻底断开
答案:
TCP协议双方都必须维护一个序列号,三次握手的过程及时通信双方互相告知序列号起始值,并确认对方已经收到了序列号。
如果只是两次握手,至多只有连接发起方的起始序列号能被确认,另一方选择的序列号则是得不到确认,服务器这边无法判断客户端是否能接收。
答案:
假设是客户端主动断开,在第一次挥手中客户端发起请求断开,接着服务器回了个应答(第二次),表示我已经收到请求。等一段时间,等服务器的数据发送完成之后再向客户端发起断开(第三次)。客户端接受到之后发起应答(第四次)。
如果是三次挥手那么只能是第二和第三次合并,即收到第一次挥手之后,发起应答和断开请求,但是这样会存在服务器有些数据还没发送完成就发起断不开
??一句话:服务器回应你的请求断开,服务器可能还有数据没发送,所以应答和FIN就分开发。
答案:
(1)输入域名后,系统首先会在本地的hosts文件检查是否有这个网址的映射,如果有就调用这个IP地址完成域名的解析。
(2)如果没有,就会去查找本地DNS解析器缓存,是否有这个网址映射关系,如果有,直接返回,完成解析。
(3)如果上面两种都没有,首先会找TCP/IP参数设置的首选DNS服务器,我们叫它本地DNS服务器,此服务器收到查询时,如果要查询的域名在本地配置区域资源中,则解析。