网络编程 socket 套接字

  1. LINUX网络编程基础知识
    1.1. TCP/IP协议概述
    协议protocol:通信双方必须遵循的规矩 由iso规定 rpc文档

osi参考模型:(应-表-会-传-网-数-物)

è 应用层 表示层 会话层 传输层 网络层 数据链路层 物理层

tcp/ip模型4层:

应用层{http超文本传输协议 ftp文件传输协议 telnet远程登录 ssh安全外壳协议 stmp简单邮件发送 pop3收邮件}

传输层{tcp传输控制协议,udp用户数据包协议}

网络层{ip网际互联协议 icmp网络控制消息协议 igmp网络组管理协议}

网络接口层{arp地址转换协议,rarp反向地址转换协议,mpls多协议标签交换}

TCP协议:传输控制协议 面向连接的协议 能保证传输安全可靠 速度慢(有3次握手)

UDP协议:用户数据包协议 非面向连接 速度快 不可靠

通常是ip地址后面跟上端口号:ip用来定位主机 port区别应用(进程)

http的端口号80 ssh–>22 telnet–>23 ftp–>21 用户自己定义的通常要大于1024

1.2. TCP协议
(1) 概述

TCP是TCP/IP体系中面向连接的运输层协议,它提供全双工和可靠交付的服务。它采用许多机制来确保端到端结点之间的可靠数据传输,如采用序列号、确认重传、滑动窗口等。

首先,TCP要为所发送的每一个报文段加上序列号,保证每一个报文段能被接收方接收,并只被正确的接收一次。

其次,TCP采用具有重传功能的积极确认技术作为可靠数据流传输服务的基础。这里“确认”是指接收端在正确收到报文段之后向发送端回送一个确认(ACK)信息。发送方将每个已发送的报文段备份在自己的缓冲区里,而且在收到相应的确认之前是不会丢弃所保存的报文段的。“积极”是指发送发在每一个报文段发送完毕的同时启动一个定时器,加入定时器的定时期满而关于报文段的确认信息还没有达到,则发送发认为该报文段已经丢失并主动重发。为了避免由于网络延时引起迟到的确认和重复的确认,TCP规定在确认信息中捎带一个报文段的序号,使接收方能正确的将报文段与确认联系起来。

最后,采用可变长的滑动窗口协议进行流量控制,以防止由于发送端与接收端之间的不匹配而引起的数据丢失。这里所采用的滑动窗口协议与数据链路层的滑动窗口协议在工作原理上完全相同,唯一的区别在于滑动窗口协议用于传输层是为了在端对端节点之间实现流量控制,而用于数据链路层是为了在相邻节点之间实现流量控制。TCP采用可变长的滑动窗口,使得发送端与接收端可根据自己的CPU和数据缓存资源对数据发送和接收能力来进行动态调整,从而灵活性更强,也更合理。

(2) 三次握手协议

在利用TCP实现源主机和目的主机通信时,目的主机必须同意,否则TCP连接无法建立。为了确保TCP连接的成功建立,TCP采用了一种称为三次握手的方式,三次握手方式使得“序号/确认号”系统能够正常工作,从而使它们的序号达成同步。如果三次握手成功,则连接建立成功,可以开始传送数据信息。

其三次握手分别为:

1)源主机A的TCP向主机B发送连接请求报文段,其首部中的SYN(同步)标志位应置为1,表示想跟目标主机B建立连接,进行通信,并发送一个同步序列号X(例:SEQ=100)进行同步,表明在后面传送数据时的第一个数据字节的序号为X+1(即101)。

2)目标主机B的TCP收到连接请求报文段后,如同意,则发回确认。再确认报中应将ACK位和SYN位置为1.确认号为X+1,同时也为自己选择一个序号Y。

3)源主机A的TCP收到目标主机B的确认后要想目标主机B给出确认。其ACK置为1,确认号为Y+1,而自己的序号为X+1。TCP的标准规定,SYN置1的报文段要消耗掉一个序号。

运行客户进程的源主机A的TCP通知上层应用进程,连接已经建立。当源主机A向目标主机B发送第一个数据报文段时,其序号仍为X+1,因为前一个确认报文段并不消耗序号。

当运行服务进程的目标主机B的TCP收到源主机A的确认后,也通知其上层应用进程,连接已经建立。至此建立了一个全双工的连接。

三次握手:为应用程序提供可靠的通信连接。适合于一次传输大批数据的情况。并适用于要求得到响应的应用程序。

(3) TCP数据报头

TCP头信息

·源端口、目的端口:16位长。标识出远端和本地的端口号。

·序号:32位长。标识发送的数据报的顺序。

·确认号:32位长。希望收到的下一个数据报的序列号。

·TCP头长:4位长。表明TCP头中包含多少个32位字。

·6位未用。

·ACK:ACK位置1表明确认号是合法的。如果ACK为0,那么数据报不包含确认信息,确认字段被省略。

·PSH:表示是带有PUSH标志的数据。接收方因此请求数据报一到便可送往应用程序而不必等到缓冲区装满时才发送。

·RST:用于复位由于主机崩溃或其他原因而出现的错误的连接。还可以用于拒绝非法的数据报或拒绝连接请求。

·SYN:用于建立连接。

·FIN:用于释放连接。

·窗口大小:16位长。窗口大小字段表示在确认了字节之后还可以发送多少个字节。

·校验和:16位长。是为了确保高可靠性而设置的。它校验头部、数据和伪TCP头部之和。

·可选项:0个或多个32位字。包括最大TCP载荷,窗口比例、选择重复数据报等选项。

1.3 UDP协议
(1) 概述

UDP即用户数据报协议,它是一种无连接协议,因此不需要像TCP那样通过三次握手来建立一个连接。同时,一个UDP应用可同时作为应用的客户或服务器方。由于UDP协议并不需要建立一个明确的连接,因此建立UDP应用要比建立TCP应用简单得多。

它比TCP协议更为高效,也能更好地解决实时性的问题。如今,包括网络视频会议系统在内的众多的客户/服务器模式的网络应用都使用UDP协议。

(2) Udp数据包头格式

服务端代码
在这里插入图片描述
客户端代码

在这里插入图片描述


版权声明:本文为weixin_48561544原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。