​TCP是怎么保证可靠性​

​TCP保证可靠性是通过下面三种方式实现的(TCP在黑书的155页)​

1、序列号、确认应答、超时重传

数据到达接受方,接收方需要发出一个确认应答,表示已经收到该数据段,并且确认序号会说明它下一次需要接收的数据序列号。若发送迟迟未收到确认应答,那么可能是发送的数据丢失,也可能是确认应答丢失,这时发送方在等待一定时间后会进行重传。这个时间一般是2*报文往返时间+一个偏差值

2、窗口控制与高速重发控制/快速重传(重复确认应答)

TCP会利用窗口控制来提高传输速度,即在一个窗口大小内,不用一定要等到应答才能发送下一段数据,**窗口大小就是无需等待确认而继续发送数据的最大值**,若不使用窗口控制,每一个没收到确认应答的数据都要重发

计网面试汇总(一)_客户端

3、拥堵控制

若把窗口定的很大,发送端连续发送大量的数据,可能会造成网络的拥堵,甚至网络瘫痪(所以TCP为了防止这种情况的发生进行了拥堵控制)

慢启动:定义拥塞窗口,一开始将该窗口大小设为1,之后每次收到确认应答,将拥塞窗口大小*2

拥塞避免:设置慢启动阈值,一般开始都设为65536.拥塞避免是指当拥塞窗口大小达到这个阈值,拥塞窗口的值不再指数上升,而是加法增加(每次确认应答,拥塞窗口大小+1),以此来避免拥塞

将报文段的超时重传看做拥堵,一旦发生超时重传,需要先将阈值设为当前窗口大小的一半,并且将窗口大小设为初值1,然后重新进入慢启动过程

计网面试汇总(一)_重传_02

这样可以达到:在TCP通信时,网络吞吐量呈现逐渐的上升,并且随着拥堵来降低吞吐量,再慢慢上升的过程,网络不会轻易的发生瘫痪

​简述一下TCP简历连接和断开连接的过程​

计网面试汇总(一)_客户端_03

​三次握手​

1、Client将标志位SYN置为1,随机产生一个值seq=x,并将该数据包发送给Server,Client进入SYN_SENT状态,等待Server确认

2、Server收到数据包后由标志位SYN=1知道请求建立连接,Server将标志位SYN和ACK都置为1,ack=x+1,随机产生一个值seq=y,并将该数据包发送给Client以确认连接请求,Server进入SYN_RCVD状态。

3、Client收到确认后,检查ack是否为x+1,ACK是否为1,若正确则将标志位ACK置为1,ack=y+1,并将该数据包发送给Server,Server检查ack是否为y+1,ACK是否为1,若正确则连接建立成功,Client和Server进入ESTABLISHED状态,完成三次握手,随后Client与Server之间可以开始传输数据

​四次挥手​

由于TCP连接时是全双工的,因此每个方向都必须要单独进行关闭,这一原则是当一方完成数据发送任务后,
发送一个FIN来终止这一方向的连接,收到一个FPN只是意味着这一方向上没有数据流动,即不会再收到数据了,
但是在这个TCP连接上任然能够发送数据,直到这一方向也发送了FIN。首先进行关闭的一方将执行主动关闭,而另一方则执行被动关闭

1、数据传输结束后,客户端的应用进程发出连接释放报文段,并停止发送数据,客户端进入FIN_WAIT_1状态,
此时客户端依然可以接收服务器发送来的数据

2、服务器接收到FIN后,发送一个ACK给客户端,确认序号为收到的序号+1,服务器进入CLOSE_WAIT状态。
客户端收到后进入FIN_WAIT_2状态

3、当服务器没有数据要发送时,服务器发送一个FIN报文,此时服务器进入LAST_ACK状态,等待客户端的确认

4、客户端收到服务器的FIN报文后,给服务器发送一个ACK报文,确认序列号为收到的序号+1。此时客户端进入TIME_WAIT状态,
等待2MSL(MSL:报文段最大生存时间),然后关闭连接

​补充知识点​

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

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

PS:ACK、SYN和FIN这些大写的单词表示标志位,其值要么是1,要么是0;ack、seq小写的单词表示序号。

 

​请说一下TCP的模型,状态转移​

四层TCP/IP模型如下:

应用层:Telnet(远程登录协议),FTP和e-mail等
传输层:TCP和UDP
网络层:IP、ICMP和IGMP
链路层:设备驱动程序及接口卡

网卡既是物理层设备又是数据链路层设备

​HTTP和HTTPS的区别,以及HTTPS的优缺点​

区别

  1. HTTP协议是以​​明文(不加密的报文)​​​的方式在网络中传输数据,而HTTPS协议传输的数据则是经过​​TLS加密​​​后的,HTTPS具有更高的安全性(​​什么是TLS加密???​​)
  2. HTTPS在TCP三次握手阶段之后,还需要​​进行SSL的handshake​​,协商加密使用的对称加密密钥
  3. HTTPS协议需要​​服务端申请证书​​​,​​浏览器端安装对应的根证书​
  4. HTTP协议端口是80,HTTPS协议端是433

HTTPS优点

1、HTTPS传输数据过程中使用密钥进行加密,所以安全性高
2、HTTPS协议可以认证用户和服务器,确保数据发送到正确的用户和服务器

缺点

1、HTTPS握手阶段延迟较高:由于在进行HTTP会话之前还需要进行SSL握手,因此HTTPS协议握手阶段延时增加
2、HTTPS部署成本高:一方面HTTPS协议需要使用证书来验证自身的安全性,所以需要购买CA认证;另一方面由于采用HTTPS协议需要进行加解密的计算,占用CPU资源较多,需要的服务器配置或数目高

​HTTP返回码​

​IP地址作用,以及MAC地址作用​

​OS中的中断​

​OSI七层模型和TCP/IP四层模型,每层列举两个协议​

​TCP的三次握手和四次挥手的过程及原因​

​搜索baidu,会用到计算机网络中的什么层?,每层是干什么的​

​什么是TCP拥堵控制?什么情况开始减慢增长的速度​

TCP用了哪些措施保证其可靠性

请说说TCP/IP数据链路层的交互过程

有没有做过socket的开发,具体的网络层的操作该怎么做(网络编程的基本步骤)

请问server端监听端口,但还没有客户端连接进来,此时进程处于什么状态

 ​