首页 > 其他 > 详细

TCP服务

时间:2021-03-29 12:06:17      阅读:17      评论:0      收藏:0      [点我收藏+]

TCP服务

    在《TCP/IP协议的认识》一文中,我们知道TCP服务是属于传输层的。TCP提供了一种面向连接,提供可靠的,字节流传输服务。

    那么什么是面向连接,是不是还有面向无连接的传输服务?我们来简单了解一下

    1.  传输方式的分类

    通过网络发送数据,大致可以分为面向有连接与面向无连接两种类型。

    1)面向有连接型

    面向有连接中,在发送数据之前,需要在收发主机之间连接一条通信线路。

    举例:比如人们平常打电话,输入对方电话拨出之后,只有对方拿起电话才能真正通话,通话结束挂掉电话就如同切断电源。

    优点:这样可以避免发送无谓的数据。

    2) 面向无连接型

    面向无连接则不要求建立和断开连接。发送端可于任何时候自由发送数据。反之,接收端也永远不知道自己会在何时从哪里收到数据。因此,在面向无连接的情况下,接收端需要时常确认是否收到了数据。

    举例:比如在邮局寄包裹,负责处理邮递业务的营业员,不需要确认收件人的详细地址是否存在,也不需要确认收件人是否能收到包裹,只要发件人有一个寄件地址就可以办理邮寄业务。

    优点:这种方式可以省略某些既定的、繁杂的手续,使处理变得简单,易于制作一些低成本的产品,减轻处理负担。

    2.  TCP服务模型

    这里,借用一下网络上别人的图,链接在下方贴出,来说明三次握手和四次挥手的状态转换,以及TCP是如何传输数据的,如下图:

 技术分享图片

 我们来理解一下上图的含义:

1.  三次握手:

1) 客户端初始化状态为 closed ,向服务器发送 syn ,之后,状态更改为syn-send

2) 服务器端初始化状态为 listen ,收到 syn 后,向客户端发送syn+ack,之后,状态更改为syn-rcvd

3) 客户端收到服务端发来的数据包后,向服务器端发送ack,之后,客户端状态更改为established

 

2.  四次挥手:

1) 客户端向服务器发送 fin ,之后客户端状态更改为fin-wait-1

2) 服务器端收到数据包后,还可以向客户端继续发送数据data,发送之后,再发出ack,之后服务器端状态更改为close_wait

3) 客户端收到服务器端发送的数据包,将状态更改为fin-wait-2,不做回应。服务器端接着向客户端发送fin,之后,服务器端状态更改为last-ack

4) 客户端收到服务器端的数据包后,向服务器端发送ack,之后,客户端的状态更改为time_wait,然后状态初始化为closed。服务器端收到客户端发来的数据包后,将状态更为close,然后初始化将状态保持为listen。

 

3.  数据传输:使用滑动窗口实现

要解决的问题:吞吐量、丢包、粘包、错误、超时重传,序号

1)如果一次只发送一个包,等待对方ack,之后再发送一个包。。。这样带来吞吐量低的问题。

2)滑动窗口的容量是固定的,一次可以发送多个包。已发送未ack,未发送未ack.比如4,5,6,7其中5,6,7已经ack,它会等待4被ack后,将4,5,6,7一起返回

 

注意:

每次是由客户端先主动发送网络数据包,服务器属于被动回应,这样设计为了:

1. 避免建立无效连接,占用带宽

2. 客户端跟服务器:一般都是多对一,或者说客户端比服务器要多,从节省资源上考虑

 

参考链接:https://zhuanlan.zhihu.com/p/53374516

TCP服务

原文:https://www.cnblogs.com/hld123/p/14591072.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!