TCP主题

TCP解决了什么问题

	TCP是iso模型的第四层模型。作为一个传输层协议,提供了面向连接的,可靠的,基于字节流的服务。
	ps:所谓面向连接的,是指tcp在正式传输数据之前,需要建立连接,在传输数据之后,需要断开连接。
			所谓可靠的,是指tcp通过一些措施,包括序列号与确认机制,超时重传,拥塞控制和流量控制来保证传输的可靠性。
			基于字节流的就是字面意义所讲的,
	由此可以发现,tcp提供了不可靠的ip层之上的可靠的服务。这是tcp的核心和精髓。
	而这个可靠机制包含它的建立连接,序列号确认机制,超时重传机制,拥塞控制和流量控制机制。

TCP的连接机制是怎样的?

	首先tcp是端到端的连接,何谓端?就是 ip地址+端口号,也叫做套接字。
为什么是三次握手?
	说是三次握手,实质上是四次。就是,我发起请求,你确认请求,然后你发起请求,我再确认请求。这就是两轮四次的请求确认操作,一轮可不可以?
	答案是不可以,因为tcp是在ip这个不可靠的协议之上的。在连接建立之前第一次的请求操作可能会错误,比如说乱序。我发了两次请求,先发的反而后到,这种情况下如果只有一轮,会发生错误。所以必须要两轮,只不过是把确认请求和发起请求并在一起而已。所以是三次握手。
具体连接过程
	1.客户端先发送连接请求,syn加上序列化,告知我的起始序列号。自身进入syn_send状态。
	2.服务端收到请求,也发送一个回应的请求,这个请求有两个含义,一个对收到的确认,二是发送自身的起始序列号。syn+ack,自身进入syn_received状态
	3.客户端再次确认,发送ack请求,自身进入establish状态,也就是连接建立状态。
为什么是四次挥手?
	三次挥手可以么?答案是不可以,因为在三次握手中,是把ack和syn这两步放在一起,所以只有三次。而挥手时,不能放在一起。
	例如:客户端发送断开请求,服务器收到,发送收到包,但是它自身并不一定要断开,可能还有未发送完的数据。不能把ack和syn反正一起发送。所以是四次挥手。
具体连接过程
	1.某一端发送断开连接请求,fin标记。然后自身进入fin_wait1
	2.另一端收到断开连接请求,ack标记,自身进入close_wait状态。
	3.某一端收到ack,进入fin_wait2状态。
	4.另一端继续发送直到没有,发送一个fin标记的请求,自身进入last_ack状态。
	5.最后某一端发送ack请求,自身进入time_wait状态,等待两个msl时间,然后关闭。

TCP的序列号确认机制

	从握手和挥手可以看出,这个序列号是十分重要的,序列号起到标识数据包的作用。tcp会为自己发送的数据标上序列号。接受端可以根据序列号对其进行排序。

TCP的超时重传机制

	tcp会开启计时器,为每个发送的数据包都计时,如果固定时间收不到ack,就重传,直至成功。

TCP的拥塞控制机制

	有一个拥塞窗口,代表每次发送的数据量,如果发送成功了,ok,如果失败了就归1

TCP的流量控制机制

	发送数据不能太快,否则会超出接收者的能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值