UNIX网络编程学习(一)——TCP,UDP与SCTP

5 篇文章 0 订阅
5 篇文章 0 订阅

这一篇是看了UNP的第二章后个人的一些总结和理解。

总述

TCP是面向连接的、可靠的传输协议。
UDP是无连接的、不可靠的传输协议。
SCTP是面向关联的、可靠的传输协议。

TCP
  • TCP面向连接
    TCP在进行端对端的传输时,要求客户端和服务端都都创建一个ip:port套接字。服务端要经过socket、bind、和listen三个阶段来创建;而客户端只经历一个socket阶段就创建完成。当客户端和服务器端交互时,客户端主动connect服务端以此建立通信。
  • TCP可靠
    TCP可靠主要体现在三个方面——报文传输序列化、建立连接时的三次握手、释放连接时的四次挥手。
    报文传输的序列化使得每个发送的报文不会重复,同时有序的传输报文也能保证报文的完整性;建立连接的三次握手和释放连接的四次挥手就不细说了。值得注意的是在释放连接时,提出结束连接的那一方有一个TIME_WAIT状态。这个状态的设立有两个好处:
    • 可靠地实现TCP全双工连接的终止
      若在最后挥手确认时发送的ACK报文丢失了,就要由主动提出方重发,所以主动方要TIME_WAIT以预防该情况。
    • 允许老的重复分节在网络中消逝
      考虑这样一种情况,已经关闭的ip:port在经过一段时间后又要重新启用,如果之前它发送出去的报文因”迷路”还没有被丢弃,然后又恰好发送到了新建立的连接那,那么和它新建立连接的另一端怎么处理这个报文?因此需要等待一段时间来让所有之前已发送的报文被丢弃。
UDP

UDP 是无连接、高效的协议。
它高效是因为在发送数据时,只需要发送和接收两个环节即可。考虑TCP和UDP同时要发送一个不超过MSS的报文。UDP发送端只管发送就可以,它不并在乎接收端接收与否。而TCP则要先经历三次握手来建立连接,之后再发送;发送完成后再经历四次挥手释放连接。
此外,TCP由于在收发两端都存在一个数据缓冲区,因此它的接收和发送都受到了影响。例如有一个TCP发送端缓冲区大小为60字节,而要发送的数据有100字节,那么它只能先写入缓冲区60个字节,该进程阻塞等待所有字节写完;但UDP不同,它在发送端没有缓冲区一说,因此可以通过提高发送端带宽来快速地发送数据。虽然接收端有数据缓冲区,但UDP并不在乎数据是否被接收。我觉得这一点也是UDP比较高效的原因。

SCTP

SCTP面向关联是它两端并不是ip:port一对一的连接,而是ip*:port的组合。即每一端都有多个ip,但它们端口号都一样。具体怎么通信我还不太了解。
SCTP中的cookie我觉得能很好地确保安全传输。它的发送和接收端都有一个唯一的验证标识cookie,每次发送一个报文都要加上这个cookie来标识身份。

其他:

1.最大MSS 1460 = 1500 - 20(IP首部) - 20(TCP首部)
2.TCP和UDP的send和请求返回时,并不代表数据被接收到了,只是说明缓冲区中的数据被发送出去了;同理,recv请求返回时,也不代表数据被接收完了,只是说明缓冲区中数据开始读了。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值