(文章转载信息已注明) (并加入一些个人注释)
Linux 网络编程(总结)
1.1 TCP/IP 协议
协议protocol:通信双方必须遵循的通信行为 由iso文档 rpc文档规定
osi参考模型:(应-表-会-传-网-数-物)
1.1.1 7层OSI网络模型:
应用层 表示层 会话层 传输层 网络层 数据链路层 物理层
1.1.2 4层TCP/IP网络模型:
应用层 {http超文本传输协议 ftp文件传输协议 telnet远程登录 ssh安全外壳协议 stmp简单邮件发送 pop3收邮件}
传输层 {tcp传输控制协议,udp用户数据包协议}
网络层 {ip网际互联协议 icmp网络控制消息协议 igmp网络组管理协议}
网络接口层 {arp地址转换协议,rarp反向地址转换协议,mpls多协议标签交换}
1.1.3 TCP/UDP 协议区别:
TCP协议:传输控制协议 面向连接的协议 能保证传输安全可靠 速度慢(有3次握手)
TCP可靠性传输由操作系统内核确保,其目的是确保将传输内容是否送达结果发送给应用层,传输双方都会有明确的指示(当然处于应用层的程序员无法感知),系统内核会将是否发送成功的结果通知给应用层用户。也就是说,系统内核会负责将应用层用户发送的数据送达到对端。
这种可靠性交付建立在,通信双方事先建立虚拟通信链路的基础上(3次握手--建立连接,2次握手--断开连接)
TCP传输协议速度慢,由于tcp采用超时重传、窗口大小滑动、确认数据等等,这些有助于可靠性交付的措施。
UDP协议:用户数据包协议 非面向连接 速度快 不可靠
UDP数据报之所以 速度快、不可靠,因为UDP通信双方事先没有建立任何连接,系统内核只负责将数据根据对端地址发送出去。至于在发送过程中是否有丢失、超时等等一些对端收不到的情况,底层是不负责交付的。例如一些端口扫描、服务扫描、主机存活性等工作,都可以用UDP协议。
1.1.4 网络通信地址:通常是ip地址后面跟上端口号:ip用来定位主机 port区别应用(进程)
http的端口号80 ssh-->22 telnet-->23 ftp-->21 用户自己定义的通常要大于1024
Server 服务器主机 是否可以同时使用相同端口的TCP和UDP监听服务
1.2 OSI参考模型及TCP/IP参考模型
网络通信协议的必要性
网络通信不仅仅是从电脑PC端发出信息就完事了,程序员从应用层将信息发出后,需要规范将信息进行分割、分段,规定分段后信息的大小,并对其进行标记、排序等等工作。信息发出端和接收端对信息的处理,正好是顺序相反的过程。
发送端将信息拆分、封装、按顺序标记,最终将信息送入网络;
接收端将信息按照顺序合并,重新组合成完整内容,最终将信息发送给应用层用户。
信息在通信对端的处理大致如此。被送到网络中的信息,需要按照路由信息,将信息进行转发。
而这些转发节点可能是路由器,交换机等等,不同厂商的网络设备或许对信息的转发处理有所不同,但只要遵循相同的格式,对于网络设备的生产、开发、使用都会产生极大的便利。
因此对网络通信的具体形式进行标准化,从网络硬件通信的层面统一、规范数据格式、发送方式等等,使得Internet网络推广、使用更加便利。
例如以太网、802.11无线网络、蓝牙等等不同网络介质均有相对应的通信标准规范。
今天我们先学习一下以太网最基本也是重要的知识——OSI参考模型。
1、OSI的来源
OSI(Open System Interconnect),即开放式系统互联。 一般都叫OSI参考模型,是ISO(国际标准化组织)组织在1985年研究的网络互连模型。
ISO为了更好的使网络应用更为普及,推出了OSI参考模型。其含义就是推荐所有公司使用这个规范来控制网络。这样所有公司都有相同的规范,就能互联了。
2、OSI七层模型的划分
OSI定义了网络互连的七层框架(物理层、数据链路层、网络层、传输层、会话层、表示层、应用层),即ISO开放互连系统参考模型。如下图。
每一层实现各自的功能和协议,并完成与相邻层的接口通信。OSI的服务定义详细说明了各层所提供的服务。某一层的服务就是该层及其下各层的一种能力,它通过接口提供给更高一层。各层所提供的服务与这些服务是怎么实现的无关。
TCP/IP协议族的每一层的作用:
·数据链路层:负责将二进制流转换为数据帧,并进行数据帧的发送和接收。要注意的是数据帧是独立的网络信息传输单元。
·网络层:负责将数据帧封装成IP数据报,并运行必要的路由算法。
·传输层:负责端对端之间的通信会话连接和建立。传输协议的选择根据数据传输方式而定。
·应用层:负责应用程序的网络访问,这里通过端口号来识别各个不同的进程。
TCP/IP协议族的每一层协议的相关注解:
·ARP:(地址转换协议)用于获得同一物理网络中的硬件主机地址。
·MPLS:(多协议标签交换)很有发展前景的下一代网络协议。
·IP:(网际互联协议)负责在主机和网络之间寻址和路由数据包。
·ICMP:(网络控制消息协议)用于发送报告有关数据包的传送错误的协议。
·IGMP:(网络组管理协议)被IP主机用来向本地多路广播路由器报告主机组成员的协议。
·TCP:(传输控制协议)为应用程序提供可靠的通信连接。适合于一次传输大批数据的情况。并适用于要求得到相应的应用程序。
·UDP:(用户数据包协议)提供了无连接通信,且不对传送包进行可靠的保证。适合于一次传输少量数据。
不同地址之间转换的协议 DNS、ARP、RARP
1.3 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载荷,窗口比例、选择重复数据报等选项。