Stanford CS 144 Note 9 - TCP service model 基本模型

基本模型

从application layer到link layer,每一层的data被encapsulated到下一层的segment中

在TCP的视角中 信息的传递时stream of bytes

Host A把这段byte stream放进TCP segment中 传送给B

B的transport layer再把这段信息提取出来 传递到B的application layer

实际上 这个TCP segment可能需要被传输多次 以防止丢失

由A到B的segment中的sequence number是从ISN到这个segment的offset

由B到A的segment中的Ack number指的是 which byte B is expecting next(在B的byte stream中)

TCP 3-way handshake

三次握手 传输/关闭 Connection setup/ Connection teardown

关于 connection teardown

A发送 Fin message 到B - 关闭A到B的单向connection

B发送 (Data +)Ack 到A - B仍有剩余数据需要传送到A (如果需要的话)

B发送 Fin message 到A - 关闭B到A的单向connection(如果不再需要传输数据)

A发送 Syn message 到B - 确认connection is fully closed

TCP的特性&如何实现

Stream of Bytes / Reliable Delivery / In-sequence / Congestion Control

如何实现 Reliable Delivery 传输的可靠性:

        1. Acknowledgment indicates correct delivery:当一个TCP layer收到了data,会发送Acknowledgment给这个data的发送者用来告知数据是否被正确无误地送到

        2. Checksums detect corrupted data: TCP的header中包含了范围包括data和header的checksum来检查是否有数据被corrupted

        3. Sequence number detects missing data: TCP的header中包含了这个segment的第一个byte的序列号

        4. Flow-control prevents overrunning receiver: Receiver会以此告诉sender是否有足够的buffer空间来接受新的数据


TCP segment 格式

Destination Port:数据要送到哪个application

Source Port:告诉另一端的transport layer,如果要送回数据的话应该送到哪个application(A送到B的TCP segment里应该是A的port number)

Sequence Number:这个segment携带的data的first bit在整个byte stream中的位置(如果Initial Sequence Number是1000而这个是第一个segment,那sequence number就是1000。同时如果这个segment长度为500,那么下一个segment的sequence number是1500)

Acknowledgment Sequence Number:下一个segment的首位,同时说明这一位之前所有的数据都是确认无误接收到了(这个segment长度为750,ASN就是751,同时说明前750bits都是正确的)

Checksum:帮助检查corrupted data

HLEN:这个header的长度

Flag:判断这个segment是Fin,Syn还是其他的种类

TCP唯一的ID Unique ID of TCP

 IP DA / IP SA / Protocol ID / Source Port / Destination Port 这五个区域共同作用于识别TCP链接

*Host A作为一个新连接的initiator,需要选择一个unique的source port ID

要保证它不会accidentally选择一个重复用在另一个connection的id

方法1:每次有新的connection需新的source port number,就increment(但是不安全,可能会用完,比如有一个存在时间很长的TCP segment,后面产生的新port number又从头开始,和它撞上了)

方法2:生成随机的ISN,来防止和其他链接的ID重复

当Host A初始化了一个到B的连接,它会发送一个A的Initial sequence number和一个Syn 

同理B也会发送会一个B的Initial sequence number,一个Syn和一个Ack、

从A到B时的segment中的sequence number就是这段data的first byte

 从B到A时的segment中的acknowledgment sequence number是这段data的下一个byte

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值