网络套接字(UDP和TCP编程)

      最后更新:2022-08-04 10:56:09 手机定位技术交流文章

      一:port

      实质上,端数是一个替换节点16位的整数[0,65535][0,2^16-1]
      功能:端口代码用于识别进程,并告诉操作系统该进程是处理当前数据的
      一个端口数只能由一个进程使用,一个进程可以使用多个端口数
      已知端口号[0,1023]:已由某些已知协议使用
      mysql:3306
      oracle:1521

      二:网络数据的第五元素组信息

      源IP、源端口、目标IP、目标端口、协议

      源IP地址:从哪个主机获取网络数据的识别
      源端口:识别哪些进程从主机生成与"源IP"相符的网络数据
      目标IP:指定发送网络数据到哪个主机
      目标端口:当您通过目标IP找到目标主机时,您可以通过目标端口找到相应的进程
      协议:当双方传输数据时使用的协议(一般称为UDP/TCP)

      三:网络字节序

      低端序列:低级在低地址
      大型末尾字符序列:低载到高地址
      主机序列:主机自己的序列,如果它是大的,主机的序列是大的,如果它是小的,主机的序列是小的
      网络字符序列:需要使用大端序列传输数据,当网络传输时

      四:主机和网络同步

      主机序列转换为网络序列

      网络序列转换主机序列

      TCP和UDP协议的特征和差异

      UDP

      不连接:UDP各方不需要在发送数据之前进行通信,他们只需要了解对方的ip和i端口(另一方的进程可能尚未准备好)来发送数据
      不可靠:不保证UDP数据是可靠的,并按时到达
      面向数据的报告:UDP和应用程序/网络层在传输数据时提供完整的数据

      TCP

      以连接为导向:两个TCP当事人在发送数据之前建立连接(一)确保对方正常通信。 (二)提供双方发送后续数据的详细资料(例如序列号码)
      可靠的传输:TCP保证数据以可靠和有序的方式交付。
      传入到字符的流: 传入的数据没有明显的边界2。 对于接收器来说,可以根据任何字符接收

      UDP插座编程

      编程流程

      服务端: 创建插座, 绑定地址信息
      客户端: 创建一个接口并不建议绑定地址信息 ( 可以绑定 )

      在这里插入图片描述

      创建插座:将过程绑定到网络卡上,可以从网络卡接收数据或通过网络卡发送数据
      绑定地址信息的含义:绑定ip,绑定端口是为了在网络中标识出来一台主机和一个进程
      对接收机:发送数据的人知道接收机在哪台机器上进行哪些处理
      用于发送者:识别发送过程的机器从哪个机器发送的网络数据

      创建接口

      • 域:地址域-选择特定协议家族来通信(udp/tcp)可以考虑在指定的网络层中使用哪种协议
        AF_UNIX:该区域的插座(使用同一机器上的文件通信,而不是跨域机器)
        AF_INET:IP协议用于IPv4版本
        AF_INET6:ip协议用于ipv6版本
      • 类型:插座的类型
        SOCK_DGRAM:用户数据报告插座-对应UDP
        SOCK_STREAM:流式套接字-对应TCP
      • 议定书
        0:指示要根据插座类型选择的默认协议
        SOCK_DGRAM:相应的UDP协议
        SOCK_STREAM:相应的TCP协议
        也可以执行具体的协议
        IPPROTO_TCP(6):代表tcp协议
        IPPROTO_UDP(17):代表UDP协议
      • 返回值:返回一个索克操作手柄,基本上是一个文件描述符
        大于等于0:创造成功
        小于0:创建失败

      绑定接口

      • 索克福德
      • addr:绑定地址信息ip+port
      • addrlen:绑定地址信息长度

      发送接口

      • 索克福德
      • buf:发送的数据
      • len:发送的数据长度
      • 旗号:0(封锁发送)
      • dest_addr:包含目的地ip、目的地端口的地址信息结构
      • daarlen:地址信息长度
      • 返回值:成功:返回正常发送的数据,失败:返回-1

      接收接口

      • 索克福德
      • buf:缓冲区准备好接收数据
      • 镜头:接收到的最大数据大小
      • 旗帜:0(接收区)
      • src_addr:源IP+源端口
      • addrlen:返回地址信息的长度

      sockaddr

      在这里插入图片描述

      TCP接口编程

      编程流程

      服务端: 创建插座, 绑定地址信息,听录音并获取新的连接,收发数据,关闭连接
      客户端:创建一个接口,不建议绑定地址信息(可以绑定),发起连接,收发数据,关闭连接

      监视是指监视一个新的tcp客户端链接并与客户端建立一个tcp连接。 注:此时,tcp连接在内核中建立
      获取新连接意义:获取新连接的索克描述符,每个tcp将有一个共同的索克描述符
      启动连接: 启动到服务端的tcp连接

      在这里插入图片描述

      监听接口

      • 索克福德
      • backlog:TCP同时连接的数目(完成连接的大小)
      • 返回值:成功:0;失败:-1;

      未完成的连接队列:仍然在连接创建过程中的连接在这个队列中被模拟(一个被保持三次的连接)
      连接队列完成:连接已经建立,正常通信连接可以放在这个队列中(三手连接已经完成)

      /proc/sys/net/ipv4/tcp_max_syn_backlog中的值可以修改以更改未完成连接队列的大小

      阻塞调用接口

      • sockfd :套接字描述符
      • addr:描述客户端地址信息(客户端IP和端口)的地址信息结构
      • Addrlen:地址信息长度
      • 返回值:成功:返回新连接的插座;失败:-1
        注:这是阻塞调用函数
        1.如果在完成的队列中没有建立连接,则被封锁
        2.如果您有了新的连接,请返回
        3.返回的新连接的套接字,是为了和客户端进行通信的,只不过这个套接字没有进行监听功能,同时又客户端的地址信息
        4.如果多个客户端启动连接,服务端将创建一系列新的连接

      连接接口

      • 索克福德
      • addr:描述服务端地址信息的地址信息结构(服务端的ip和端口)
      • Addrlen:地址信息长度
      • 返回值:成功:0;失败:-1;
        注:此函数不仅完成连接函数,而且如果客户端没有绑定,则绑定了客户端地址信息

      发送接口

      • 索克福德(accept接收回来新连接的套接字,并非是监听套接字)
      • buf:将buf的内容发送到空间中
      • len:数据长度
      • 旗号:0(封锁发送)
      • 返回值: 成功: 返回发送的字节数目; 失败: -1;

      接收接口

      • 索克福德
      • buf:存储由buf指定的空间中所接收的数据,需要事先打开
      • len:预期接收的字节数目
      • 旗帜:0(接收区)
      • 返回值: 成功: 收到的文数; 0: 结束连接; -1: 收到错误

      本文由 在线网速测试 整理编辑,转载请注明出处,原文链接:https://www.wangsu123.cn/news/31518.html

          热门文章

          文章分类