基于TCP/IP的实现

TCP/IP协议族:
TCP/IP介绍:

tcp/ip作为当今最流行的通信方案,(另外一种方案是一百米以内直接喊)TCP/IP定义了一整套实现方案。tcp/ip协议族将网络分为五层,也有文档将之分为四层.
当应用程序向互联网传送数据时,数据被送入协议栈中,然后逐个通过每一层直到被当作一串比特流送入网络。其中每一层对收到的数据都要增加一些首部信息(有时还要增加尾部信息) TCP传给I P的数据单元称作TCP报文段或简称为TCP段(TCP segment)。IP传给网络接口层的数据单元称作IP数据报(IP datagram)。通过以太网传输的比特流称作帧(Frame )。


网络接口层:

网络接口层实际上就是OSI模型中的物理层与数据链路层的合并。

物理层:
与osi的作用一致,TCP/IP协议是网络层之上规范,对物理层特别定义。也许是定义了我并不知道。
数据链路层:
在tcp/ip协议族中,链路层主要有三个目的:  
1. 为ip模块发送和接收ip数据报;
2. 为arp模块发送 arp请求和接收arp应答;
3. 为rarp发送rarp请求和接收rarp应答。tcp/ip支持多种不同的链路层协议,这取决于网络所使用的硬件,如以太网、令牌环网、 fdi(光纤分布式数据接口)及 rs-232串行线路等。
以太网的帧结构,以及802.3帧结构:

帧结构

MAC地址:
MAC(Media Access Control,介质访问控制)地址,也叫硬件地址,长度是48比特(6字节),由16进制的数字组成,分为前24位和后24位:
前24位叫做组织唯一标志符(Organizationally Unique Identifier,即OUI),是由IEEE的注册管理机构给不同厂家分配的代码,区分了不同的厂家。
后24位是由厂家自己分配的,称为扩展标识符。同一个厂家生产的网卡中MAC地址后24位是 同的。
MAC地址对应于OSI参考模型的第二层数据链路层,工作在数据链路层的交换机维护着计算机MAC地址和自身端口的数据库,交换机根据收到的数据帧中的“目的MAC地址”字段来转发数据帧。
其中第1字节的第8Bit,对应的0000000  (0)  -01010000-10111010-...,标识这个地址是组播地址还是单播地址。这是由以太网的传输协议高字节先传,但每一字节内低位先传的特性所决定的,事实上这传输的顺序为(0) 00000000000101001011101...
环回接口:
环回接口的目的是运行在一台主机上的程序通过TCP/ip进行通信,A类保留地址127.0.0.0/8 就是为环回接口保留.环回接口工作过程是当IP数据报离开网络层时把它返回给自己.
MTU:
数据链路层对数据帧的长度都有一个限制,这里只说以太网和802.3
类型hMTU(字节)
以太网1500
802.31492

如果传输层(tcp/udp)传送给网络层(ip)的数据长度超过MTU那么IP协议就要对该数据分片
注:路径MTU为整条链路中最小的MTU值

网络层:
IP协议:
IP协议是TCP/ip协议族中核心协议之一,TCP,UDP,ICMP,IGMP 协议都以IP协议作为三层的传输协议。
ip协议是无连接,不可靠的网络层协议,所以若要保证数据的可靠性完整性需。需上层对数据提供校验功能(即TCP协议)

如果上层协议数据包过大IP协议会进行分片操作

IP包头:

这里写图片描述
注:普通的IP包头长度为20字节

·介绍
版本占据四位,用于标识IP使用的版本即IPv4,IPv6
首部长度IP包头的长度,由4位组成,共可表示16种变化,其中0000无意义,所以一共拥有15种变化。每32位计数增长1或者每4字节计数增长1,,所以最大计数15*4为60字节,ip首部的长度最大为60字节。
服务类型字段包括一个 3bit的优先权子字段(现在已被忽略), 4 bit的TO S子字段和1 bit未用位但必须置0。4bit的TOS分别代表:最小时延、最大吞吐量、最高可靠性和最小费用。 4 bit中只能置其中1 bit。如果所有4 bit均为0,那么就意味着是一般服务。
总长度整个IP数据报的长度,长16比特所以最大传送字节65535,但最终发送长度需符合MTU长度要求,
标识唯一的标识了主机发送的每一份数据报,同样占据了16位长度,每发送一份数据包,该标识增长1。
标志占据3个标志位,分别为保留位(一般被置0), 不分片位,更多分片。DF: Don‘t Fragment,中间的一位,只有当 DF=0 时才允许分片MF: More Fragment,最高位, MF=1表示后面还有分片。 MF=0表示最后一个分片
片偏移该分片相对于原始数据报开始处位置的偏移量,以8个字节为单位
生存时间(TTL)设置了数据报可以经过多少路由器,当ttl值归零时,路由器丢弃该数据包 ,ttl值是防止路由环路的重要手段。
8位协议标示了上层接收的协议, 1为ICMP, 2为IGMP,6表示TCP, 17表示UDP。
首部校验和占16位,只检验数据报的首部不检验数据部分.这里不采用 CRC 检验码而采用简单的计算方法。
32源IP地址
32目的地址
选项
IP地址:
在interne中IP地址是唯一的,也就是说每台主机的IP地址可以唯一的标识出每台主机,IP地址为32位长度的二进制数。IP地址可以使用多种方法去表示,但是最终转换为32位二进制数。
IP地址的表示方法最常用的为点分十进制,将32位二进制数分为4部分,并用10进制表示。

这里写图片描述
直接将二进制数不分段,转化为十进制同样可以表示IP地址。
这里写图片描述

IP地址分类:

IP地址按鬼知道的方法划分:ABCDE类,每种分类所能容纳的主机数目不同

··
A类:0.*…. /8 0.0.0.0~127.255.255.255.255 共有2^24个主机位
B类:10.**…. /16 128.0.0.0~191.255.255.255 共有2^16个主机位
C类:110.*…. /24 192.0.0.0~223.255.255.255 共有2^8个主机位
D类:组播地址 1110.**…. 224.0.0.0~239.255.255.255
E类:保留地址 11110.*…. 240.0.0.0~254.255.255.255

在网络中有类的地址划分,通常并不灵活,可能造成大量的网络地址浪费,所以现在基本采用的都是无类的地址划分。但是无类的地址划分,同样网络中路由设备采用的也是无类的路由协议,RIPV2,ospf等(CIDR无类域间路由)。

其中特殊地址,私有地址:

本地环回地址:127.0.0.0~127.255.255.255
windows默认地址:169.254.0.0~169.254.255.255
A类私有地址:10.0.0.0/8
B类私有地址:172.16.0.0/16 -172.31.0.0/16
C类私有地址:192.168.0.0-172.168.255.0/24

ip地址按作用范围分类可分为三类:

    单播地址(目的为单个主机)、广播地址(目的端为给定网络上的所有主机)以及多播地址(目的端为同一组内的所有主机)

注:该分类 与ABCDE类分类是两种分类,之间没有任何联系(除了他们分的都是IP地址)。

子网掩码:
确定IP地址主机位宽度,子网掩码的作用就是划分网络段与网络位。子网掩码与iP地址一样使用32位二进制数,每一位都与IP地址相对应。而且子网掩码是由连续的1 构成的。
其中有类网络地址的子网掩码是固定的,无类网络的子网掩码是可变的,但是无类网络的地址必须是连续的
在计算网段时将32位的网络地址与32位的子网掩码相与得到的就是网络段(如果192.168.0.0/24,按位相与得到的是192.168.0.0 那么网络位就是192.168了么,192.168.0呢,所以还要带上子网掩码,计算网段的方法其实就是取子网掩码中全为1的一段对应的网络地址。)
点分十进制表示法,仅仅只是表示32位的二进制。计算时还是需要转换成二进制。
通信时,适用对方的IP地址与自己的子网掩码进行相与,从而确定对方是否在自己网段范围内。
例 A:192.168.1.1/16  B:192.168.2.1/24  A认为B在自己的网段中,但是B认为A不在自己的网段中.所以A ping B,请求超时。B ping A 目标主机不可达。
IP路由选择:
主机的路由选择可以说是相对简单的(排除在主机上开启了路由转发功能并安装了某   些动态路由协议):主机的路由表一般可以分成两类:
1. 该主机直连网段的IP地址,下一跳指向的一般    是出接口,或本机的IP地址。
2. 默认路由,下一跳指向网关。网关的作用只是用来生成默认路由。 
路由表的格式:
··
目的IP地址可以是一个主机地址也可以是一个网络段,主要作用概括一段IP地址的范围。
下一跳精确并准确的IP主机地址,
标志位有两个,一个标识路由表的IP地址类型(主机地址;网络地址),一个标识该路由是直连主机还是网络路由

对于动态路由协议这里不描述。

传输层:
UDP协议:
是一个简单的面向数据报的运输层协议:进程的每个输出操作都正好产生一个UDP数据报,并组装成一份待发送的 I P数据报。
UDP首部:

这里写图片描述

TCP协议:
TCP提供一种面向连接,可靠的字节流服务。广播与组播不适用TCP作为4层协议
TCP首部:

这里写图片描述

TCP三次握手:
规定经过符合规范的三次信息交互才可建立逻辑上的连接.
3次次数不可缩减.如果缩减为两次那么a去访问b,a发送初始报文,b接受并回复然后进入连接状态.但是如果a为恶意访问那么,将造成b机器大量的无用连接.但是4次挥手可以缩减为3次.

这里写图片描述

1. A向B发起连接 ,A在本地生成一个随机的序列号.然后A向B发送SYN请求(syn位置位,同时本次数据包的序列号为生成的随机数,).
2. B接收到A的SYN请求,B首先会同样生成随机的系列号,B会在同一个数据包中对A的请求作出回应,同时申请与A的连接,(ACK位置位,作用回应A机器的SYN,SYN置位,用于申请A的连接。序列号存放B生成的随机数,确认号存放A机器的随机数加1的值)
3. A接收到B的数据包.将会对B的SYN请求作出回应,即ACK置位,序列号A的初始生成的随机数加2,确认号B的初始生成的随机数加一,然后A进入连接状态。
4. B在接收到A的响应后进入连接状态 。
TCP四次挥手:
断开连接必须经过最少3次有效交互才能从进入断开状态,正常环境下需要经过4次交互 。挥手过程的最初发起者可以使客户机,也可以是服务器

这里写图片描述

1. A向B发起终止,数据包内容FIN位置位,序列号为A上次发送的数据包序列号加一。
2. B接受到A的数据包,B响应A的终止请求,ACK位置位,序列号为B上次发送的数据包序列号加一 ,确认序列号为A的数据包序列号加二
3. B继续向A发送数据包,B向A发起终止,FIN位置位,ACK位置位,序列号为上次的序列号加一,确认号为A的数据包序列号加二。当B回应A的中断请求后,只是A不会在向B发送数据包,但是B可以向A继续发送数据包。所以B终止请求的序列号并不一定紧随回应A机器FIN请求的序列号。
4. A回应B的终止请求。ACK位置位,然后A进入等待时间,
5. B收到B的终止请求确认信息,进入断开状态
有限状态机:

CLOSED 没有任何连接状态
LISTEN 侦听状态,等待来自远方TCP端口的连接请求
SYN-SENT 在发送连接请求后,等待对方确认
SYN-RECEIVED在收到和发送一个连接请求后,等待对方确认
ESTABLISHED 代表传输连接建立,双方进入数据传送状态
FIN-WAIT-1 主动关闭,主机已发送关闭连接请求,等待对方确认
FIN-WAIT-2 主动关闭,主机已收到对方关闭传输连接确认,等待对方发送关闭传输连接请求
TIME-WAIT 完成双向传输连接关闭,等待所有分组消失
CLOSE-WAIT 被动关闭,收到对方发来的关闭连接请求,并已确认
LAST-ACK 被动关闭,等待最后一个关闭传输连接确认,并等待所有分组消失
CLOSING 双方同时尝试关闭传输连接,等待对方确认

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值