TCP协议

一、TCP协议格式:

              16位源端口号              16位目的端口号
                                              32位序号
                                            32位确认序号
4位首部长度保留6位

U

R

G

A

C

K

P

S

H

R

S

T

S

Y

N

F

I

N

16位窗口大小
16位校验和16位紧急指针
                                              选项
                                              数据

1.目的端口号用来分用,首部长度用来解包。

2.特点:可靠 、有连接的、面向流

3.名词:SN:序号、ASN:确认序号(希望发送端下次发送的第一个字节的序列号)、SYN:表示想建立连接,进行信息的同步、ACK:确认应答用的,表示确认之前收到的 segment,配合确认序列号(ASN)使用,空的ACK不需要再次应答。

4.TCP为了保证可靠性实现的一些机制:

 1)发送的每个数据都带着SN

 2)如果数据中的ACK被置为1,表示该TCP包有确认含义

 3)ASN可以计算收到哪些数据

5.可靠性:

 1 )数据不会出现错误(校验和)

 2)作为一个发送方,希望知道自己发送的数据对方是否收到(确认应答)

 3)保证数据是按序收到的(SN)

 4)接收方可以去重数据(SN)

二、确认应答机制

  数据在网络上的传输过程中不一定走的是同一条路,TCP 利用 SN 在接收方做排序保证数据的有序性。

超时重传:作为一个发送方,将自己的数据发送出去之后,超过一定时间没有收到接收方的回复,则重新将数据发送一次。

三、发送缓冲区和接收缓冲区

1.为什么要有发送缓冲区:发送的数据有可能需要重传,所以 TCP 需要暂时保存这些数据。

2.为什么要有接收缓冲区:数据的到达是无序的,数据不是马上被取走的。

四、连接管理(可靠性为基础)

1.为什么需要 TCP 连接:因为这套机制是以不同的五元组描述的通道分别管理的。

2.什么是连接:

 抽象层面:五元组唯一标识的一条通信通道。

OS 层面:一个 Connection 对象,描述五元组信息 + 各种管理信息(SN + ASN +缓冲区信息)

【socket和连接的关系】:

套接字是 OS 提供的用于应用层和网络协议栈进行通信的一套标准接口。

ServerSocket ss = new ServerSocket(8888);
//1.新建socket
//2.绑定了本地 ip + 本地 端口
//3.监听

连接管理:建立连接、连接可用、连接释放

五、三次握手建立连接

1.描述三次握手过程:

1)客户端发送:SYN = 1、ACK = 0、SN = C'SN、ASN = 0  状态由CLOSED 变为SYN_SENT,

2)服务端状态先由CLOSED变为LISTEN,服务端接收到客户端的消息,发送 SYN = 1、ACK = 1、SN = S'SN、ASN = C'SN+1,状态由LISTEN变为SYN_RECVD,

3)客户端收到服务端的消息后发送 ACK = 1、ASN = S'SN+1、SN = S'ASN、SY = 0、客户端状态变为ESTABLISHED,

4)服务端接收到客户端的消息之后服务端的状态变为ESTABLISHED。

2.为什么是三次:

1)为什么不能两次:C 发 SYN,S 回 ACK,S发 SYN,C没有回ACK,不满足确认应答,则S会一直超时重传,不满足可靠性。

2)为什么不能四次:能少尽量少,因为S回ACK 和S发SYN肯定是同时的,所以合并了。

3.建立连接的目的是什么?

1)为什么要有连接:因为连接管理这套机制是以不同的五元组描述的通道分别管理的。

2)什么是连接:连接是两个五元组之间的一条通信通道。

3)建立连接的目的:为了同步SN(初始序列号)

4)为什么SN序列号必须是随机的:如果ISN都是0,那么就不需要同步了,ISN如果是确定的,可能会被伪造segment进行攻击。

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值