对socket的理解

socket只是一个概念并非是一个实体,协议栈内部有一块存放控制信息的内存空间,例如:通信对象的IP地址、端口号、通信操作的进行状态等。如果非要赋予socket实体,那么存放控制信息的内存空间就是socket的实体。
socket在执行数据收发操作时还需要一块内存空间,称为缓存空间。传输层从socket拿到数据后并不是直接传输,而是将数据放在缓存空间中的,因为来自应用层的数据的大小是不受传输层控制的(跟传输层无关),并且不同的mac层协议网络包能容纳的数据长度是固定的——MTU。例如在以太网中MTU为1500字节,在MTU基础上去除IP和TCP头部后的长度为MSS。当来缓存区中的数据长度超过或者接近MSS时再发出去。
但是也有应用层数据一直很小的情况,为了解决这种情况,再协议栈上设置了一个计时器,即使缓存区数据长度没有超过MSS,超时也会将会数据发送出去。

connect():作用是建立客户端与服务器端socket的连接。在调用socket创建套接字时,服务器的地址和端口协议栈是不知道的,因此在调用connect()时会将服务器的地址和端口号告知协议栈。之后,客户端会向服务器传达开始通信的请求。连接的实际操作时交换控制信息,在套接字中记录这些必要信息并准备数据收发的一连串操作。此外在执行数据收发操作时,还需要一块用来临时存放要收发数据的内存空间,这块内存空间称为缓冲区。
bind():一个主机可能会有多个ip地址,bind()的作用就是将主机的一个地址与某个端口关联。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值