UNIX网络编程总结:基础篇

在网络通信中客户—服务器这种模式可以说是最普遍的,而我们所说的套接字编程,就是利用一层在应用层与运输层的接口,来编写应用程序,我们的信息以此在网络中交互。另外在以后的高级部分我们还将看到绕过传输层的原始套接字甚至绕过IP层直接读取链路层的帧

1.那么为什么套接字提供的是应用层与运输层间的接口呢?

其实不难理解,应用层提供的是具体的网络应用对于通信的细节并不了解。另外应用层一般是应用进程,而底下的四层通常是作为系统调用的一部分。

那么运输层的TCP, UDP,SCTP有什么不同呢?

前面两个我们就不说了,大家都应该很熟悉了,至于SCTP,他和TCP一一样是一个可靠的传输协议,但是他还提供了消息边界、传输级别多宿支持以及将端头阻塞减少到最小。这些我们一个一个慢慢来。

  首先,既然后面两个有连接的我们就从建立连接开始说起。

  tcp的三次握手,我们就不在唠叨了,至于为什么需要三次握手。我觉的最直接就是,因为如果两次握手我们建立的只是一条单方向可行的通路而已。

值得注意的是 SYN 里含有多个TCP选项,较常用的是MSS(愿意接受的最大分节大小),而另外一个窗口规模选项。

  刚开始我看到这两个名词时候我也是有点乱。后来想想了想也就明白了。

   这个有点像我们在运货,MSS规定了我们每辆车能装的货物大小,而窗口规模就是仓库有多少的空间可以装货物。对于MSS的值我们必须知道的是,因为MSS的使用16位表示的,所以对于IPV4和不使用特大静荷选项的IPV6足可以表示任何一种情况,但是如果,是使用了最大净荷选项的IPV6,那么会将65495视为“无限“这一特殊值;

接下来是关于TCP断开连接时的四次握手的TIME_WAIT状态,这个状态的存在的理由。第一点:实现可靠的TCP连接的终结。我们可以想象一下,如果最后和我们发送的ack服务器端没收到。那么我们必须重新发多一次。而第二个理由,假设我们断开了,连接之后,又与之前相同的IP地址与端口建立连接,那么之前的迷路的信息就可能会被接收影响通信。

SCTP的握手过程不同于TCP采取的四次握手


值得注意的是Ta,Tz这个验证标记,必须在对端发送的每一个分组中出现,而cookie C中包含设置与SCTP关联所需的所有状态,这样服务端就不必保存所有关联的客户端的信息。

  在完成四次握手之后两边都会选择一个主目的地址作为通信的双方


SCTP的关闭使用的是三次握手。

可以看出与TCP的关闭相比,SCTP不存在所谓的“半关闭”,也不存在TIME_WAIT。


关于IP数据报的大小,需要注意的是IPV6路由器不对数据报分片。同时IPv6有个DF位当这个位被设置时主机和路由都不对数据报进行分片,该技术用于MTU发现,当中间某个路由由于MTU不能转发数据时就会向主机发送一个ICMP报,TCP就会减少数据报大小再重传,但是遗憾的是在今天的网络中,许多的防火墙丢弃了ICMP消息


对于发送缓冲区TCP会在缓冲区保存一个发送数据的副本直到收到确认数据的ack才将其删除,SCTP同样会在缓冲区中保存数据的副本,








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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值