TCP/IP总结

传输层的功能

为应用程序提供可靠的服务

  1. 提供进程间的逻辑通(网络层提供主机间的通信)
  2. 复用和分用:复用指不同的应用进程可以使用同一个传输层协议,分用是指接收方的传输层在剥去报文的首部后能够把这些数据准确的交付给目的应用进程。
  3. 差错检测:首部和数据进行检测
  4. 提供两种不同的协议:TCP、UDP。

寻址和端口

端口:应用进程通过端口号进行标识,16bit。
熟知端口号:服务端指派给一些重要应用的端口,如Tcp,IP。
套接字socket=IP:端口号,唯一标识一台主机和其上的某个应用。

无连接和面向连接

TCP面向连接:传输之前通过三次握手建立连接,数据传输结束释放连接。FTP,HTTP,TELNET
UDP无连接:提供一条不可靠的逻辑信道,不需要连接,不需要回复。TFTP,DNS

TCP、UDP两者的区别

TCP和UDP是OSI模型中的传输层中的协议。
TCP提供可靠的通信传输,而UDP则常被用于让广播和细节控制交给应用的通信传输。
两者的区别大致如下:
1.TCP面向连接即通过三次握手协议建立连接、四次挥手断开连接,UDP面向非连接即发送数据前不需要建立链接
2.TCP提供可靠的服务(数据传输),通过TCP连接传送的数据,无差错,无丢失,无重复,按序到达。UDP无法保证,UDP尽最大努力交付,即不保证可靠交付,没有确认和重传机制。
3.TCP面向字节流,实际上是TCP把数据看成一连串无结构的字节流;
UDP面向报文的,UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如直播、IP电话,实时会议等)
4.TCP数据传输慢,UDP数据传输快。因为对系统资源的要求(TCP 较多,UDP 少);TCP首部开销20字节;UDP的首部开销小,只有8个字节
5、每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信
6、TCP 保证数据顺序,UDP 不保证。
7、TCP通过使用序号、确认重传等机制来保证可靠传输,而UDP缺少这些机制。

TCP连接与断开

三次握手

在这里插入图片描述
第一次握手:客户端将标志位SYN置为1,随机产生一个值seq=J,并将该数据包发送给服务器端,客户端进入SYN_SENT状态,等待服务器端确认。
第二次握手:服务器端收到数据包后由标志位SYN=1知道客户端请求建立连接,服务器端将标志位SYN和ACK都置为1,确认号ack=J+1,随机产生一个值seq=K,并将该数据包发送给客户端以确认连接请求,服务器端进入SYN_RCVD状态。
第三次握手:客户端收到确认后,检查ack是否为J+1,ACK是否为1,如果正确则将标志位ACK置为1ack=K+1,并将该数据包发送给服务器端,服务器端检查ack是否为K+1,ACK是否为1,如果正确则连接建立成功,客户端和服务器端进入ESTABLISHED状态,完成三次握手,随后客户端与服务器端之间可以开始传输数据了。

3.2 四次挥手(重点)
四次挥手即终止TCP连接,就是指断开一个TCP连接时,需要客户端和服务端总共发送4个包以确认连接的断开。在socket编程中,这一过程由客户端或服务端任一方执行close来触发。
由于TCP连接是全双工的,因此,每个方向都必须要单独进行关闭,这一原则是当一方完成数据发送任务后,发送一个终止位FIN来终止这一方向的连接,收到一个FIN只是意味着这一方向上没有数据流动了,即不会再收到数据了,但是在这个TCP连接上仍然能够发送数据,直到这一方向也发送了FIN。首先进行关闭的一方将执行主动关闭,而另一方则执行被动关闭。
下面来看看四次挥手的流程图:
在这里插入图片描述
中断连接端可以是客户端,也可以是服务器端。
第一次挥手:客户端发送一个终止位FIN=M,用来关闭客户端到服务器端的数据传送,客户端进入FIN_WAIT_1状态。意思是说"我客户端没有数据要发给你了",但是如果你服务器端还有数据没有发送完成,则不必急着关闭连接,可以继续发送数据。
第二次挥手:服务器端收到FIN后,先发送ack=M+1,告诉客户端,你的请求我收到了,但是我还没准备好,请继续你等我的消息。这个时候客户端就进入FIN_WAIT_2 状态,继续等待服务器端的FIN报文。
第三次挥手:当服务器端确定数据已发送完成,则向客户端发送FIN=N报文,告诉客户端,好了,我这边数据发完了,准备好关闭连接了。服务器端进入LAST_ACK状态。
第四次挥手:客户端收到FIN=N报文后,就知道可以关闭连接了,但是他还是不相信网络,怕服务器端不知道要关闭,所以发送ack=N+1后进入TIME_WAIT状态,如果Server端没有收到ACK则可以重传。服务器端收到ACK后,就知道可以断开连接了。客户端等待了2MSL后依然没有收到回复,则证明服务器端已正常关闭,那好,我客户端也可以关闭连接了。最终完成了四次握手。

TCP 可靠传输原理实现

1 序号:每个字节都有一个序号
2 确认:确认号:希望收到下一个报文段的第一个字节的序号。累计确认机制。
3 重传:(1)超时:重传这一数据报。(加权平均往返时间)
(2)冗余ack:当收到比期望序号大的报文段时,就发送一个冗余ack。收到3个akc时,表明已丢失,重传。快速重传机制。

确认和重传:接收方收到报文后就会进行确认,发送方一段时间没有收到确认就会重传。
流量控制:当接收方来不及接收发送的数据时,则会提示发送方降低发送的速度,防止包丢失。点到点、端到端
拥塞控制:当网络发生拥塞时,减少数据的发送。
数据合理分片与排序:TCP 会对数据进行分片,接收方会缓存为按序到达的数据,重新排序后再提交给应用层。
滑动窗口:确保有序接收报文。

TCP的拥塞控制

滑动窗口机制实现流量控制:
图中的窗口内的数据即便没有收到确认应答也可以被发送出去。不过,在整个窗口的确认应答没有到达之前,如果其中部分数据出现丢包,那么发送端仍然要负责重传。为此,发送端主机需要设置缓存保留这些待被重传的数据,直到收到他们的确认应答。
在滑动窗口以外的部分包括未发送的数据以及已经确认对端已收到的数据。当数据发出后若如期收到确认应答就可以不用再进行重发,此时数据就可以从缓存区清除。
收到确认应答的情况下,将窗口滑动到确认应答中的序列号的位置。这样可以顺序地将多个段同时发送提高通信性能。这种机制也别称为滑动窗口控制。在这里插入图片描述
窗口机制控制实现流量控制:
窗口控制:窗口大小就是指无需等待确认应答而可以继续发送数据的最大值。上图中窗口大小为4个段。这个机制实现了使用大量的缓冲区,通过对多个段同时进行确认应答的功能在这里插入图片描述

TCP拥塞控制

总结:在TCP连接建立和网络出现超时时,采用慢开始和拥塞避免算法;当发送方接收到冗余ack时,采用快重传和快恢复机制。
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

玖玖玖_violet

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值