1.为什么要了解协议
程序员与协议合作,完成应用。
了解协议是为了了解协议完成了什么,提供了什么服务,自己还应该做什么。
2.从协议的角度,套接字是什么
套接字是协议的接口,
IP套接字,代表可使用IP协议服务。
TCP套接字,代表可使用TCP协议服务。
3.对编程而言,UDP协议应该了解什么
(1)应用的消息被封装到UDP数据报,UDP数据包被封装到IP数据报。
(2)UDP不可靠,UDP不保证数据一定到达,按顺序到达,重复到达。
(3)UDP只保证到达的数据是正确的(进行了错误校验)
(4)UDP报是有长度的,应用可以获得长度(报式协议)
(5)UDP协议是无连接的,意味,一个UDP套接字可以向多个主机发UDP报,可以接收多个主机的UDP报。
4.TCP协议呢
(1)TCP是面向连接的,意味必须遵守建立连接,交换数据,断开连接
(2)TCP是可靠的,因为TCP有对方确认和己方超时重传机制,但TCP并不保证数据一定传递给对方,TCP只保证尽量传递,若传递失败,及时通知(通过断开连接的方式)
(3)TCP如何认为传递失败?
TCP会进行数次超时重传,如果都没有回复,就断开连接,表示失败,大概耗时4-15分钟(具体看实现)
(4)TCP如何确认超时?
TCP有RTT算法,以动态估算客户端服务器往返时间,以确认超时。
(5)TCP提供流量控制,TCP有个滑动窗口,表示可以待发送的数据的buff大小,如果TCP接收到一个数据,窗口就减一,如果发送一个数据,窗口就加一。窗口可能为0,表示buff满了。
滑动窗口的大小会发送给对方,以调节对方的发送速率。
(UDP不提供流量控制,一个UDP发的过快,导致另一个UDP来不及接收导致丢包,是常有的事)
(6)TCP是全双工的,意味一个进程可以同时进行收发(如一个线程接收,一个线程发送)。
(UDP也是全双工的)
原文地址:https://www.cnblogs.com/yangxinrui/p/12184710.html