socket知识总结,持续更新

逐渐转移到简书

首先socket分两种方式:socket是针对TCP/IP协议的封装, socket本身并不是协议, 而是一个API,通过socket我们才能使用TCP/IP协议;

TCP:传输控制协议, 提供面向链接可靠的字流服务, 提供超时重发, 丢弃重复数据, 检测数据控制流量等功能, 正式收发数据之前需要建立三次握手;

    三次握手:1. 客户端发送syn包,并进入syn_send(请求链接)状态, 并等待服务器确认;

                    2. 服务器收到客户端的syn(序列编号)包后,也发送一个syn(syn=k, 即syn+ack)包,并进入syn_reveive状态;

                    3. 客户端收到服务器的syn+ack包,向服务器发送确认包ack(ack = k+1),此包发送完毕则和服务器进入建立链接(ESTABLISHED)状态,完成三次握手;

                    名词解释:

                  注:http请求是基于TCP链接的;     

UDP:用户数据报协议, 面向非链接, 不保证可靠性的数据传输服务, 没有超时重发等一系列等机制, 故而传输速度很快;

        不与对方建立链接, 而是直接把数据包发送过去, UDP适用于一次只传送少量数据对可靠性要求不高的应用环境;

TCPUDP
基于链接无链接
要求系统资源多要求资源少
结构复杂结构比较简单
数据流模式数据报格式
保证数据正确性可能丢包,不保证数据的准确性
提供超时重发一次发送

点:基于TCP的socket如何保证数据的完整性, 读到包头开始,直到读到相应的包尾,取出中间的buffr,认为是一个完整的数据包;

 

客户端的使用流程:

  1.  引入头文件;

  2. 创建coket;

  3. 建立链接(基于TCP, 三次握手流程);

  4. 发送数据到服务器;

  5. 从服务器接受数据;

  6. 关闭链接;

 

断开连接的四次握手:

  1. 客户端发送fin包到服务器, 请求是否可以断开;

  2. 服务器收到收发送fin包,确认可以断开;

  3. 服务器发送ack包,并断开连接;

  4. 客户端收到服务器的包并断开链接,同时发送ack包确认断开;

    

 

 

     ack即确认字符, 在TCP/IP协议中如果接收方成功收到数据那么会回复一个ack数据(通常ack有自己固定的格式和长度大小, 由接收方回复给发送方);

     syn即同步序列编号, TCP/IP建立链接使用的握手信号,TCP链接的第一个包; (syn攻击, 大量发送此类的包, 服务器);

     fin带有标志位的数据包用来结束一个TCP回话,但对应的端口仍处于开放状态, 准备接收后续的数据;

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值