1.网络协议
2 建立连接
握手与挥手
2.1 三次握手
- 第一次握手:建立连接时,客户端发送SYN包(seq=x)给服务器,并进入SYN-SENT状态,等待服务器确认。
- 第二次握手:服务器收到SYN包,并回复应答包ACK(ack=x+1),同时自己也发送一个SYN包(seq=y),即ACK+SYN包,此时服务器进入SYN-RCVD状态。
- 第三次握手:客户端接收到服务器发来的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此时客户端和服务器发包完毕,客户端和服务器进入ESTABLISHED(TCP连接成功)状态,完成建立连接。
2.2 四次挥手
- 第一次挥手:客户端发送FIN包(FIN=1)给服务器,告诉自己数据已经发送完毕,请求终止连接,此时客户端不能发送数据,但还能接收数据,客户端进入FIN-WAIT1(终止等待1)状态。
- 第二次挥手:服务器收到FIN包,回一个ACK包给客户端,告诉客户端我已经包了,此时还没有断开socket连接,而是等待剩下的数据传输完成。服务器进入CLOSE-WAIT(关闭等待)状态。服务器收到应答信号,变为FIN-WAIT2(终止等待2状态)
- 第三次挥手:服务器将数据传输完毕,向客户端发送一个FIN包,表示服务器可以断开连接,服务器进入LASK-ACK(最后确认)状态
- 第四次握手:客户端端收到服务器的FIN包,回复一个确认ACK包表示收到,等待一段时间(2msl 最大报文段生存时间)确保服务器不会再有数据发送过来,然后彻底关闭连接。
【问题4】如果已经建立了连接,但是客户端突然出现故障了怎么办?
TCP还设有一个保活计时器,显然,客户端如果出现故障,服务器不能一直等下去,白白浪费资源。服务器每收到一次客户端的请求后都会重新复位这个计时器,时间通常是设置为2小时,若两小时还没有收到客户端的任何数据,服务器就会发送一个探测报文段,以后每隔75秒钟发送一次。若一连发送10个探测报文仍然没反应,服务器就认为客户端出了故障,接着就关闭连接。
3.TCP与UDP
3.1 TCP和UDP的区别
1.TCP面向连接;UDP是无连接的,即发送数据之前不需要建立连接 2.TCP提供可靠的服务;UDP不保证可靠交付 3.TCP面向字节流,把数据看成一连串无结构的字节流;UDP是面向报文的 4.TCP有拥塞控制;UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话,实时视频会议等) 5.每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信 6.TCP首部开销20字节;UDP的首部开销小,只有8个字节 TCP适用于文件传输,UPD适用于视频传输
3.2 TCP协议如何保证可靠传输
3.2.1 检验和
TCP首部+TCP数据+TCP伪首部三者组合,并通过某种计算,计算结果的16位中每一位都为1,则正确,否则说明发生错误
接收段通过校验和的方式,检测数据传输过程中是否有差错和异常,如果有差错直接丢弃这个报文段和不确认收到,发送端需要重新发送。
3.2.2 序列号/确认应答
发送端发送信息给接收端,接收端收到信息都需要回应一个包,应答包。 接收端没有发送应答(ACK)包,都会重发,或者接收到应答包。
3.2.3 超时重传
tcp要求每发送一个报文段,就启动一个定时器并等待确认信息。接收端接收到新数据后返回确认信息,如果定时器超时前==(略大于RTT报文往返时间+抖动的方差)==数据未被确认,tcp就认为此报文段中的信息已经丢失或者损坏,需要对报文段中的数据进行重新的组织与重传。
备注:如果一个包经过多次的重发也没有收到接收端的确认包,认为接收端异常,强制关闭连接。
3.3ARQ协议
3.4流量控制(主机之间的收发速率)
1.超时重传的效率低下,发送一个包到下一个包中间都需要等待一段时间。 2.两个主机之间因为传输速率不同可能引起的丢包问题。 3.TCP利用滑动窗口实现流量控制,控制发送方发送的速率,包装接收方能及时接收。
接收方发送确认报文中窗口的大小控制发送方的发送速率。 可以多次发送,接收端可以进行多端的应答ACK。 通过下一次的确认包,可以判断接收端是否接收到了数据,如果数据被接收了,送发送缓存区里面删除数据。
如果接收端没有收到自己想要的数据之前,会对之前的数据进行重复的确认。发送端再收到某个应答包之后,又连续3次收到相同的应答包,数据丢失,需要重发(快重传)。
发送端如何知道丢包了:
3.5 拥塞控制(网络拥堵)
防止发送方发的太快,使得网络来不及处理,从而导致网络拥塞
- 慢开始:当主机开始发送数据时,如果把大量的数据字节注入到网络中,可能会引起网络的拥塞,经验表明最好的方法是,由小增大发送窗口大小,每次收到确认,窗口的大小翻倍。
- 拥塞避免:当窗口的大小到达阈值的实现,每经过一个RTT时间,发送窗口的大小线性增加1。
- 快速重传和快速恢复:如果接收机收到一个不按照顺序发送的数据包,他会立即给发送机一个重复确认,如果发送端接收到三个重复的确认,会认为数据段丢失,立即重传数据段。
4.网页
4.1 输入url地址到网页展开过程
- 1.浏览器查找域名的ip地址(域名解析)
- 2.浏览器向web服务器发送一个http请求(TCP连接)
- 3.服务器响应请求(发送请求)
- 4.服务器发回一个HTML响应(服务器处理请求返回HTTP报文)
- 5.浏览器开始显示HTML页面(浏览器解析渲染页面,最后结束连接)
ps:url统一资源定位符----------标识唯一的资源
4.1 状态码
1xx:信息状态码 2xx:成功码 3xx:重定向码—>需要进行附加操作以完成请求 4xx:客户端错误码 5xx:服务器错误码
4.2http和https区别
计算机网络
-
什么是http协议? 一个客户端和服务器请求和应答的标准TCP协议。用于超文本传输到本地浏览器。 -
什么是https协议? HTTP的安全版,http下加入了ssl层,https的安全基础就是SSL -
区别 1.http默认端口是80,https默认端口是443 2.http运行再tcp之上,所有传输的内容都是明文,客户端和服务器端都无法验证对方身份。 https是运行再ssl上的http协议,所有传输的内容都是经过对称加密的。
对称加密与非对称加密 对称加密:密钥只有一个,加密与解密都是一个密码 非对称加密:
4.3 长链接与短链接
http1.0中默认使用短链接,客户端和服务器每进行一次http操作,就建立一次TCP连接,任务结束就中断连接。
http1.1中默认使用的是长连接,当打开一个网页后,客户端和服务器之间用于传输http数据的TCP连接不会关闭,客户端再次访问这个服务器的时候,可以接着使用这个连接。
keep-alive不会永远保持连接,它有一个保持的时间
4.4session与cookie
cookie和session都是用来跟踪浏览器用户身份的会话方式
|