TCP是怎么保证可靠性
TCP保证可靠性是通过下面三种方式实现的(TCP在黑书的155页)
1、序列号、确认应答、超时重传
数据到达接受方,接收方需要发出一个确认应答,表示已经收到该数据段,并且确认序号会说明它下一次需要接收的数据序列号。若发送迟迟未收到确认应答,那么可能是发送的数据丢失,也可能是确认应答丢失,这时发送方在等待一定时间后会进行重传。这个时间一般是2*报文往返时间+一个偏差值
2、窗口控制与高速重发控制/快速重传(重复确认应答)
TCP会利用窗口控制来提高传输速度,即在一个窗口大小内,不用一定要等到应答才能发送下一段数据,**窗口大小就是无需等待确认而继续发送数据的最大值**,若不使用窗口控制,每一个没收到确认应答的数据都要重发
3、拥堵控制
若把窗口定的很大,发送端连续发送大量的数据,可能会造成网络的拥堵,甚至网络瘫痪(所以TCP为了防止这种情况的发生进行了拥堵控制)
慢启动:定义拥塞窗口,一开始将该窗口大小设为1,之后每次收到确认应答,将拥塞窗口大小*2
拥塞避免:设置慢启动阈值,一般开始都设为65536.拥塞避免是指当拥塞窗口大小达到这个阈值,拥塞窗口的值不再指数上升,而是加法增加(每次确认应答,拥塞窗口大小+1),以此来避免拥塞
将报文段的超时重传看做拥堵,一旦发生超时重传,需要先将阈值设为当前窗口大小的一半,并且将窗口大小设为初值1,然后重新进入慢启动过程
这样可以达到:在TCP通信时,网络吞吐量呈现逐渐的上升,并且随着拥堵来降低吞吐量,再慢慢上升的过程,网络不会轻易的发生瘫痪
简述一下TCP简历连接和断开连接的过程
三次握手
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的优缺点
区别
- HTTP协议是以
明文(不加密的报文)
的方式在网络中传输数据,而HTTPS协议传输的数据则是经过TLS加密
后的,HTTPS具有更高的安全性(什么是TLS加密???
) - HTTPS在TCP三次握手阶段之后,还需要
进行SSL的handshake
,协商加密使用的对称加密密钥 - HTTPS协议需要
服务端申请证书
,浏览器端安装对应的根证书
- 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端监听端口,但还没有客户端连接进来,此时进程处于什么状态