day 4:TCP功能,头,连接,三次握手(简要描述),UDP

TCP功能

在这里插入图片描述

flow-control意思是:B一直在对A说,你不要发的太快了,停一停,等一等你的接收方吧!咦,我还有空间,还可以再快点!

TCP头

为了确保数据可靠传输,TCP头要做的工作很多,因此组成部分也很多。我们只需知道每一部分所做的工作即可,无需记住每一部分的布局。

在这里插入图片描述
Destination port:【应传输字节给接收方的哪一个应用程序】

著名的端口号:
ssh服务器:22
web数据:80
smtp:23
其他端口号可以在IANA port number上查找

Source port:【传输字节来自于发送方的哪一个应用程序】

发送方如果是用户个人主机,那么source port不像destination port那么固定,而是通过一定的方法产生(参见下文的TCP连接部分),用来确保该TCP连接是唯一的。

Sequence:【当前数据包位于字节流中的位置】。如果当前序列号是1000,当前包的字节数目是500,那么下一个包的序列号是1500。
Acknowledgment Sequence:【下一个待发送的数据包位于字节流中的位置】。发送时会写上ack seq,通过ack seq=seq+发送的数据最后一个字节的seq+1表示数据的长度。这也表示我们已经成功接受了每个字节。例如:当前确认序列号是751,序列号是500,表示数据长度理应是250,序列号是500~750

原视频中,ack sequence的含义是:The acknowledgment sequence number in the segment from B back to A tells us which byte B is expecting next,offset by A’s initial sequence number

Checksum:【将数据的长度和TCP头的长度加起来,用于检验数据是否出错】。例如线路上的位错误或者是路由器的存储器错误
HLEN:【TCP头的长度】
flags:【信号信息】。
——ack确认对方发的syn信号有效,用于三次握手
——syn发送同步信号,表示该数据包【包含待发送的数据流的首字节】,用于三次握手
——fin指示连接的一个方向关闭,用于连接的结束
——psh告诉另一端的TCP层立即传送数据
——urg配合urgent pointer使用,告诉另一端这个紧急的数据包该走哪条快速通道urgent pointer

有人可能会问“为什么不试一下,每次发送的数据包都设置成是单独的数据流呢?或者说,将数据流拆分成小的数据流,甚至小到一个数据流只包含一个数据包?这样会引起安全的问题。首先是因为:这样别人就能猜到你的实际序列号,从而散步数据包。其次是:如果这样划分,那么你就会有很多生命周期很短的连接,不同的数据流会有大量相似序列号的数据包,它们会在网络中长期生存下来,需要你把他们过滤出来。”

window size:用于告诉接收方sliding window的尺寸N

TCP连接

在这里插入图片描述
要确保每个TCP连接都是唯一的,有以下几种方法:
1.确保连接的发起方A选择唯一的源端口号,不会意外选择与【已经在另一个连接使用的源端口号】相同的源端口号。也就是说,如果A发起多个连接(connection),连接到B,那么A与B之间任一连接之间使用的源端口号不能相同,同一时间一个源端口号只能有一个连接(connection)。
实现方法:每次新建连接就增加源端口号。由于源端口号是16位的,因此需要64k个新连接才会使得源端口号重复。

此处的增加,原文是increment,表示离散的增加而不是连续的增加

假如突然增加大量连接,又或者有一个TCP段在网络中存在了很久很久不走(卡在路由缓冲区或在临时循环中循环),使得源端口号重复了。为了减少这种可能性,TCP连接使用第二种方法:

2.TCP连接使用随机的初始值,也就是使用随机的初始序列号(Initial Sequence Number,ISN)进行初始化,来引用字节流中字节的序列号Sequence。这一点用于三次握手中:

TCP的三次握手(简要概述):

若A想向B发送数据,则
1.A启动与B的连接时,会发送一个syn+ISNA
syn表示希望建立TCP链路。
ISNA用于A到B的字节流,表示要发送的字节是字节流中的第几个

2.B收到syn以后,回复A并启动连接时,回复给A一个syn+ack+ISNB
ack表示B确认A的请求,同意建立A到B的通信。
回送syn表示TCP层想要与A的TCP层建立链路。
ISNB用于B到A的字节流,表示待接收的字节在字节流中的起始编号

3.A响应一个ack,表示它在反方向正在接受B到A的通信请求
现在两者可以准备开始相互发送数据了。

下面的情况可能需要A重新发送数据包:
1.原数据包被丢弃
2.A没有收到ack

数据发送完毕后,
1.A发送fin消息,表示A要结束对B的数据传输
2.B发送ack消息,确认A不再有要发送的数据,并停止从中寻找新的数据
但此时B仍能向A发送数据
3.B完成向A的数据传输后,发送fin
4.A发送ack消息
此时完全关闭连接,可以移除链路了。

总结:TCP提供了可靠的字节流传输

UDP

在这里插入图片描述

from:

【斯坦福大学】CS144 计算机网络介绍 I(1-93·中英字幕·机翻)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值