TCP套接字通信流程,TCP编程,多进程,多线程版本

应用层:负责应用程序之间的数据沟通;HTTP/FTP
传输层 :负责端与端之间的数据传输;TCP/UDP,也是在主机内部实现的
网络层:负责地址管理与路由选择;IP;路由器(分配私网ip,网络中找路)
链路层:负责相邻设备之间的数据帧传输;以太网协议,在相邻设备之间用的就是物理mac地址进行定位,交换机
物理层:负责广电信号的传输;以太网协议,在物理层主要规定的是传输频率,什么什么之类的,典型设备集线器
(也可以信号放大)
网络通信数据传输流程:封装与分用的过程
IP地址:网络中唯一标识一台主机
ipv4:(4个字节,42亿左右的IP,根本不够用),uint32_t DHCP动态ip分配,就是谁用给谁分配,自动分配。
NAT技术(地址替换技术),建立私网,共用一个公网ip,在每一个路由器都需要进行地址替换,因为不能像
公网一样直接互联
ipv6:uint8_t addr[16] 16个字节
每一条数据都必须包含原地址和目的地址:一位内每条网络中的数据都必须确定从哪台主机来到哪台主机去
端口号:在一台主机上唯一标识一个进程------在一台主机上,在网卡接收到网络数据,操作系统能够通过端口分辨
出,这个数据该分给那个进程处理
uint16_t;端口号范围:0~65535,其中0~1023这些端口不推荐用户使用,因为0~1023这些已经被一些知名协议所
占用或者作为预留;
一个端口号只能被一个进程占用,一个进程可以占用多个端口号
每条数据都必须包含源端口到目的端口,因为每条网络中的个数据都必须确定自己是哪个进程发出,该哪个进程处理
网络字节序:
字节序:cpu在内存中对数据的存取顺序;
大端字节序:低地址存高位
小端字节序:低地址存低位
主机的字节序的大小端取决于cpu架构:X86架构,小端字节序,mips架构,大端字节序
如何判断主机字节序:union联合体,还有就是16进制数字的解析,
网络字节序:在网络通信当中为了避免因为主机字节序不同而引起的数据二意,然后就有了规定,
在网络中进行通信的时候,使用的是网络字节序,而网络字节序就是大端字节序。
网络通信时,我们只关注的数据字节序转换:存储大于一个字节类型的数据,int long short float 
tcp协议:传输控制协议-面向连接,可靠传输,面向字节流。灵活,可以选择一次性发送,也可以选择分批发送。
udp协议:用户数据报协议-无连接,不可靠,面向数据报。不灵活一次性接收
tcp传输速度相较比较低,但是安全,会造成粘包
udp就是无法保证安全,但是速度很快,不会造成粘包,因为根本不存在粘包

操作系统如何识别把一个数据交给一个进程来处理:
在计算机上有一块网卡,专门处理网络数据,一个程序运行起来之后,第一步就是创建socket也就是在内核中创建了一个struct socket(TCB)结构体(传输控制块)
在这里插入图片描述
然后接受收据就是我们从创建套接字的时候返回的fd,按照这个句柄去缓冲区中拿数据。

tcp编程:
在这里插入图片描述
最大并发连接数:
同一时间内,可以同时连接服务器的客户端请求的数量

tcp连接断开:
 tcp自己实现的保活机制,当长时间没有数据通信的时候服务端会像客户端发送保活探测包,当这些保活探测包连续几次都
 没有响应,则认为连接断开,最直观的就是recv返回0 ,send触发异常连接断开。
 在实现的最基本的tcp服务端程序中,因为服务端不知道客户端数据什么时候到来,因为程序流程只能写死,意思就是按部
 就班的按照我们while()循环中的逻辑来执行,但是逻辑中的两个位置存在阻塞的等待的情况(accept/recv),导致服务端
 无法同时处理多个客户端的请求;
多进程/多线程版本的tcp服务器程序:
 使用多进程tcp服务端程序处理多客户端请求,每当一个客户端的连接到来,都创建一个新的子进程,让子进程与客户端进
 行通信;这样的话父进程永远只处理新客户端的连接

代码上传到了git

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值