应用编程接口API

socket应用编程接口(API)

socket定义

应用层
传输层
网络层
数据链路层
物理层

sockt 套接字 是在应用层和传输层中间的
WEB /RPC/中间件编程

在这里插入图片描述
常见的应用编程接口(API) 有
1、Berkeley UNIX 操作系统定义了一种API,称为套接字接口(socket interface),检测套接字(socket)
2、微软公司在其操作系统中采用了套接字接口API,形成了一个稍微不同的API,并称之为Windows socket interface ,WINSOCK
3、AT&T 为其unix系统V定义了一种API,简称为(Transport Layer Inteface)

一)sockt套接字创建

在这里插入图片描述

二)socket 面向TCP /IP的服务类型

在这里插入图片描述

TCP 可靠、面向连接(有三次握手和四次挥手)、字节流传输、点对点
UDP 不可靠,无连接、数据报传输

三)soeckt套接字关闭

在这里插入图片描述

四)socket的write和read

write方法
调用outputstream方法的write写输出流的时候,该线程会被阻塞,直到所有要发送的字节流全部写入完毕,或者发生异常。通过TCP/IP相关的知识,当消息接收方处理缓慢的时候,将不能及时的从TCP缓冲区读取数据,这将会导致发送方的TCP的windows size不断减少(滑动窗口机制),直至为0,双方处于Keep-Alive 状态,消息发送方将不能在向TCP 缓冲区写入消息,这个时候如果采用的是同步阻塞I/O,write操作将会无限期阻塞,直到TCP 的windows size 大于0 或者发生I/O异常,因为当windows size =0的时候,发送方会定时请求接收方,看这时候是否windows size 已经大于0

TCP 的传输效率

应用进程通过socket套接字把数据传送到TCP的发送缓存中后,剩下的发送任务就是由TCP来控制了,可以用不同的机制来控制TCP报文段的发送时机。
1、维护一个变量,它等于最大报文段长度MSS,只要放入到缓存中的数据达到MSS 字节时,就组装成一个TCP 报文段发送出去
2、第二中机制是由发送方的应用进程指明要求发送的报文段,即TCP支持的推送操作
3、就是发送方的一个计时器期限到了,这时就把当前已有的缓存数据装入报文段(但是长度不能超过MSS)发送出去

粘包和拆包

粘包和拆包定义

通过TCP 编程,无论是服务端还是客户端,当我们读取或者发送消息的时候,都需要考虑TCP底层的粘包和拆包机制,如果是应用层就无需考虑了,通过应用层协议判断改包是否是完整的包。

TCP是个“流”协议,所谓流就是没有界限的一串数据。大家可以想想河里的流水,他们是连成一片的,其中没有分界线,TCP 底层并不了解上层业务数据的具体含义,它会根据TCP缓冲区 的实际情况进行"包的划分",所以在业务上认为,一个完整的包可能会被TCP 拆分成多个包进行发送,也可能会把多个小包封装层一个大的数据包发送,这就是所谓的TCP的粘包和拆包问题。

TCP 粘包和拆包发生的原因

问题产生的原因有三个,分别如下
1、应用程序write写入的字节大小大于套接口发送缓冲区大小
2、进行MSS 大小的TCP 分段
3、以太网帧payload大于MTU进行IP 分片
图解如下所以
在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值