计网笔记(三)

1传输层知识

传输层是只有计算机才有的层次,主要提供是进程间逻辑通信 + 可靠传输或者不可靠的功能。

这里简单说一下可靠传输协议TCP + 不可靠传输协议UDP。

TCP面向连接,可靠,不提供广播和多播,而且时间延迟比较大,适用于大文件传输。 UDP无连接,收到的报也不确认,但时间延迟小,适用于小文件。

1.1端口号

端口号可以用来标识同一个主机上通信的不同应用程序(就是哪个应用程序在使用这个端口)。

1.2UDP协议

UDP协议是参考模型中一种无连接的传输层协议,提供面向事务简单不可靠信息传送服务。

1.2.1UDP特点

UDP是无连接的,减少开销和发送数据之前的时间延迟。大家都知道TCP的三次握手和四次分手,这个是需要时间花销的,但是UDP没有这部分花销。

UDP使用最大努力交付,即不保证可靠交付。那谁来保证可靠的交付呢?是由UDP的上一层协议,应用层来保证

UDP是面向报文的,适合一次性传输少量数据的网络应用。什么意思呢,如下图,UDP这层,把应用层的全部内容作为自己的数据报部分,在IP层也只是加了一个IP首部,我们知道,在以太网,链路层上的数据如果超过1500字节,就会分片,所以网络层发现上面传输层给了太大的数据就会分片,加上UDP是不可靠的协议,这就加大了UDP的不可靠性,容易丢失,所以UDP适合数据量少的。

UDP首部较小,只有8字节,而TCP由20字节。这也是减少网络传输开销的一方面。

1.3 TCP协议

TCP协议简单来说是一种位于传输层的,面向连接的可靠的基于字节流的传输层通信协议。

TCP是面向连接的传输层协议。比如说TCP的三次握手,四次分手,针对的都是连接。

每一条TCP连接只能有两个端点,每一条TCP连接是点对点的。也就是说TCP是不同计算机之间的进程的通信。

TCP提供可靠交付的服务,无差错,不丢失,不重复,按序到达。总结一下就是,可靠有序,不丢不重

TCP提供全双工通信。全双工指的是连接双方可以同时收发数据。在收发两端都有发送缓存和接收缓存,发送缓存就是一个准备发送的队列,接收缓存是一个准备接收的队列。

TCP面向字节流。以字节为单位发送。
6位控制位
在这里插入图片描述

1.3.1TCP建立连接

在这里插入图片描述

  • 首先,客户端向服务器发送请求数据包,请求与服务器建立链接,将SYN=1。
  • 服务器收到请求后为此次TCP链接分配缓存和变量(接受,发送缓存队列),并向客户端返回确认报文,其中SYN=1表示允许建立链接,ACK=1表示确认收到来自对方的数据包。
  • 客户端收到服务器的确认报文后,也分配缓存和变量(接受,发送缓存队列)。最后客户端向服务器发送一个确认报文,SYN=0,表示这个报文不是请求连接的报文了,接下来要发送数据了,ACK=1,表示收到服务器的确认请求了。

1.3.2TCP释放连接

在这里插入图片描述

  • 客户端向服务器发送断开连接请求,其中,FIN=1。
  • 服务器收到来自客户端的请求后,返回确认报文,ACK=1。此时,客户端不能再向服务器发送信息报文,只能接受来自服务器的报文。
  • 当服务器发送完要发送的信息后,便向客户端发送释放连接的报文,FIN=1,ACK=1。
  • 客户端收到报文后,返回确认报文,ACK=1。在发送完毕后,客户端进入等待状态,等待两个周期(2MSL,最长报文寿命时间)后,链接自动断开。

为什么还要等待两个周期呢?

当客户端向服务器发送完断开连接的确认报文后,若服务器没有收到该报文,就会超时重传一个断开连接的报文,然后客户端再返回一个确认报文。等待两个周期是为了防止服务器没有正常收到客户端的确认报文。

为什么连接的时候是三次握手,关闭的时候却是四次握手?

当服务器收到来自客户端的FIN报文时,服务器不一定就马上关闭连接,如果服务器还有数据未发送完,服务器先返回ACK报文,然后继续发送数据。等到数据发送完成,再向客户端发送FIN报文,客户端返回确认报文。因此就比建立链接时多出来一次。

为什么不能用两次握手进行连接?

  • 若建立连接只需两次握手,客户端并没有太大的变化,仍然需要获得服务端的应答后才进入ESTABLISHED状态,而服务端在收到连接请求后就进入ESTABLISHED状态。
  • 此时如果网络拥塞,客户端发送的连接请求迟迟到不了服务端,客户端便超时重发请求,如果服务端正确接收并确认应答,双方便开始通信,通信结束后释放连接。此时,如果那个失效的连接请求抵达了服务端,由于只有两次握手,服务端收到请求就会进入ESTABLISHED状态,等待发送数据或主动发送数据
  • 但此时的客户端早已进入CLOSED状态,服务端将会一直等待下去,这样浪费服务端连接资源
  • 但我觉得这个只是两次握手可能造成的问题,最关键的是两次握手有服务器对客户端的起始序列号做了确认,但客户端却没有对服务器的起始序列号做确认,不能保证传输的可靠性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值