TCP/IP

Posted pacino12134

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了TCP/IP相关的知识,希望对你有一定的参考价值。

技术图片

 

1、TCP/IP模型

技术图片

 

技术图片

 

TCP/IP协议通信的过程其实就是数据入栈出栈的过程。入栈就是数据发送方每层不断的封装首部和尾部,添加一些传输的信息,保证能传输到目的地、出站就是数据接收方每层不断的拆除首部和尾部,得到最终的传输数据。

下图是以http协议来说明:

技术图片

 

二、数据链路层

物理层负责的是0、1比特流与物理设备电压高低、光的闪灭之间的互换。

数据链路层负责的就是将这些0、1序列划分为数据帧,然后从一个节点(主机)传输到另一个节点(主机)。这些节点是通过MAC来唯一标识的(MAC,物理地址,一个主机有一个MAC地址)。

技术图片

 

封装成帧:把网络层数据报加头和尾,封装成帧,帧头包括了源MAC地址和目的MAC地址;

透明传输:0比特填充、转义字符;

可靠传输:在出错率很低的链路上很少用(因为一根线连着彼此,当然不会出错),在无线链路WLAN会保证可靠传输;

差错检测(CRC):接受者检测错误,如果发现错误,就丢弃该帧;

 

三、网络层

1、IP协议

IP协议是TCP/IP协议的核心,所有的TCP,UDP,IMCP,IGMP的数据都以IP数据格式传输。

要注意的是,IP不是可靠的协议,这是说,IP协议没有提供一种数据未传达以后的处理机制,这被认为是上层协议:TCP或UDP要做的事情

1.1 IP地址

数据链路层中通过MAC地址来识别两个不同的节点,在IP层(网络层)通过IP地址来识别。

32位IP地址分为网络位地址位,这样可以减少路由器中路由表记录的数目,有了网络地址,就可以限定拥有相同网络地址的终端都在一个范围内,那么路由表就只需要维护一条这个网络地址的方向,就可以找到相应的这些终端了。

技术图片

A类地址:0.0.0.0~126.255.255.255,子网掩码:255.0.0.0(可以通过子网划分,改变子网掩码)。A类地址分配给规模特别大的网络使用。

  • 127表示的是回环测试相应的地址,所以实际范围是1-126,。
  • 回送地址:127.0.0.1。 也是本机地址,等效于localhost或本机IP。一般用于测试使用。例如:ping 127.0.0.1来测试本机TCP/IP是否正常。
  • 私有地址范围:10.0.0.0~10.255.255.255

B类地址:128.0.0.0~191.255.255.255,默认子网掩码为:255.255.0.0。B类地址分配给一般的中型网络。

  • 私有地址范围:172.16.0.0~172.31.255.255

C类地址:192.0.0.0~223.255.255.255,默认网络掩码为:255.255.255.0。C类地址分配给小型网络,如一般的局域网和校园网,它可连接的主机数量是最少的,采用把所属的用户分为若干的网段进行管理。

  • 私有地址范围:192.168.0.0~192.168.255.255

D类地址(广播地址):224.0.0.0到239.255.255.255。多点广播地址用来一次寻址一组计算机,它标识共享同一协议的一组计算机。

E类地址保留给将来使用:240.0.0.0到255.255.255.254。

全0和全1都不能用:

  • 全零(“0.0.0.0”)地址对应于当前主机,表示该地址是本地宿主机,不能传送。
  • 全“1”的IP地址(“255.255.255.255”)是当前子网的广播地址

1.2 子网

在主机号中拿一部分作为子网号,进而把两级IP地址划分为三级IP地址。

IP地址:{< 网络号 >, < 子网号 >, < 主机号 >}

1.2.1 子网作用

子网掩码是一个应用于TCPIP网络的32位二进制值,必须结合IP地址使用。

子网掩码与32位于IP地址32位对应,方法就是如果某位是网络地址,那么子网掩码就是1,否则就是0.

子网掩码可以通过与IP地址相与计算,分理处IP地址的网络地址和主机地址,用于判断IP地址是在局域网上还是广域网上。

子网掩码一般用于将网络进一步划分为若干子网,避免主机过多而拥堵或过少而IP浪费

1.2.2 为什么要用子网掩码

可以分离出IP地址的网络位和主机位。为什么要分离?因为两台计算机要通讯,首先要判断是否处于同一个广播域内,即网络地址是否相同。如果网络地址相同,表明接收方在本网络,那么就可以把数据报直接发送到目标主机否则就需要通过路由网关将数据报转发送到目的地

1.2.3 子网掩码的分类

(1)缺省子网掩码(未划分子网)

子网掩码32位与IP地址32位对应,如果某位是网络地址,则子网掩码为1,否则为0。

A类网络缺省子网掩码:255.0.0.0
B类网络缺省子网掩码:255.255.0.0
C类网络缺省子网掩码:255.255.255.0

(2)自定义子网掩码(用于划分子网)

将一个网络划分为若干个子网,每个子网拥有不同的网络地址或子网地址。因为IP是有限的,实际上我们是将主机地址分为了两个部分:子网网络地址、子网主机地址。

未做子网划分的ip地址:网络地址 + 主机地址

做子网划分的IP地址:网络地址 + (子网网络地址 + 子网主机地址)

1.2.4 子网掩码与IP地址的关系

子网掩码是用来判断任意两台计算机的IP地址是否属于同一子网络的根据。具体就是两台计算机的IP地址与子网掩码进行与计算,得到的结果相同则说明是处于同一个子网络的,可以进行直接的通讯。

IP地址与子网掩码相与,得到网络位;将子网掩码取反后再和IP地址相与,得到主机位。

1.2.5 为什么要划分子网

比如A类地址中,每个A类网络可能有很多台主机,他们处于一个广播域内。在同一个广播域内有这么多主机是不可能的,网络会因为广播通信而饱和。另一方面,IP地址资源越来越少,为实现更小的广播域,就需要进一步划分成更小的网络。划分子网后,通过使用掩码,将子网隐藏起来,使得从外部看网络没有变化,这就是子网掩码。

1.2.6 子网划分

子网划分就是借用几个主机位来充当子网的网络地址,从而将原网络划分成若干子网。

划分子网时,随着借用主机位数增多,子网数目也增多,但每个子网中可用的主机数就逐渐减少。

如C类地址,原有8位主机位,而且全0和全1不能用,所以一共有2^8-2即254个主机地址,默认子网掩码是255.255.255.0。

借用一位主机位,产生2^1-2=0个子网,每个子网有2^7个主机地址;

借用2位主机位,产生2^2-1=2个子网,每个子网有2^6个主机位;

......

技术图片

 

 

1.2.7 子网掩码的计算

1、利用子网数来计算

在求子网掩码之前必须先搞清楚要划分的子网数目,以及每个子网内的所需主机数目。

  1. 将子网数目转化为二进制来表示
  2. 取得该二进制的位数,为 N
  3. 取得该 IP地址的类子网掩码,将其主机地址部分的的前N位置 1 即得出该IP地址划分子网的子网掩码。

如欲将C类IP地址192.168.10.0划分成4个子网:

  1. 4=100
  2. 该二进制为三位数,N = 3
  3. 将C类地址的子网掩码255.255.255.0的主机地址前3位置 1,得到子网掩码255.255.255.224。

技术图片

 

 

2、利用主机数来计算

  1. 将主机数目转化为二进制来表示
  2. 如果主机数小于或等于254(注意去掉保留的两个IP地址),则取得该主机的二进制位数。
  3. 将该类IP地址的主机地址位数全部置1,然后从后向前的将N位全部置为 0,即为子网掩码值。

如欲将B类IP地址192.168.10.0划分成若干子网,每个子网内有主机25台:
1) 25=11001
2)该二进制为十位数,N = 5
3)将该B类地址的子网掩码 255.255.255.0的主机地址全部置 1,得到255.255.255.255,然后再从后向前将后5位置0,即为:11111111.11111111.11111111.11100000,即255.255.252.224。

 

1.3 IP协议头

技术图片

 

 

八位的TTL( Time To Live)字段。这个字段规定该数据包在穿过多少个路由之后才会被抛弃。某个IP数据包每穿过一个路由器,该数据包的TTL数值就会减少1,当该数据包的TTL成为零,它就会被自动抛弃。

这个字段的最大值也就是255,也就是说一个协议包也就在路由器里面穿行255次就会被抛弃了,根据系统的不同,这个数字也不一样,一般是32或者是64。

2、ARP和RARP协议

ARP (地址解析协议,Address Resolution Protocol)是根据IP地址获取MAC地址的一种协议。

主机本来不知道这个IP对应的是哪个主机的哪个端口,当主机要送一个IP包的时候,会先查一下自己的ARP高速缓存(就是一个IP-MAC地址对应表缓存)。如果查到的IP-MAC值对不存在,那么主机向网络发送一个ARP协议广播包,这个包里面就有要查询的IP地址,接收到这份广播包的所有地址都会查询自己的IP地址,只有相同IP地址的接收到广播请求的主机或路由器,发回一个ARP应答分组,应答中包含它的IP地址和物理地址,并保存在发送ARP广播的主机的ARP缓存中。其他主机或路由器都丢弃此分组。

广播主机拿到ARP包后会更新自己的ARP缓存。发送广播的主机就会用新的ARP缓存数据准备好数据链路层的数据包发送工作。

RARP协议的工作与此相反

3、ICMP协议(Internet Control Message Protocol,网络控制报文协议)

IP协议并不是一个可靠的协议,它不保证数据被送达,那么,自然的,保证数据送达的工作应该由其他的模块来完成。其中一个重要的模块就是ICMP(网络控制报文)协议。

ICMP不是高层协议,而是IP层的协议

当传送IP数据包发生错误。比如主机不可达,路由不可达等等,ICMP协议将会把错误信息封包,然后传送回给主机。给主机一个处理错误的机会,这也就是为什么说建立在IP层以上的协议是可能做到安全的原因。

四、ping

ping可以说是ICMP的最著名的应用,是TCP/IP协议的一部分。

利用“ping”命令可以检查网络是否连通,可以很好地帮助我们分析和判定网络故障。

例如:当我们某一个网站上不去的时候。通常会ping一下这个网站。ping会回显出一些有用的信息。

ping这个单词源自声纳定位,而这个程序的作用也确实如此,它利用ICMP协议包来侦测另一个主机是否可达。原理是用类型码为0的ICMP发请求,受到请求的主机则用类型码为8的ICMP回应。

ping程序来计算间隔时间,并计算有多少个包被送达。用户就可以判断网络大致的情况。我们可以看到, ping给出来了传送的时间和TTL的数据。

五、Traceroute

Traceroute是用来侦测主机到目的主机之间所经路由情况的重要工具,也是最便利的工具。

原理就是它收到目的主机的IP地址之后,首先给IP地址发送一个TTL=1的UDP数据包,而经过的第一个路由器收到这个数据包以后,就自动把TTL减1,而TTL变成0后,路由器就把这个包给丢弃了,同时产生一个主机不可达的ICMP数据报给主机。主机收到这个数据包以后,再发一个TTL=2的UDP数据报给目的主机,然后第二个路由器就又会返回一个ICMP数据报,如此往复,知道到达目的主机,这样traceroute就拿到了所有路由器的IP。

技术图片

 

六、TCP/UDP

TCP/UDP都是是传输层协议,但是两者具有不同的特性,同时也具有不同的应用场景。

技术图片

面向报文的传输方式就是应用层交给UDP多长的报文,UDP就照样发送,也就是一次就发送一个报文。因此应用程序需要选择合适大小的报文,如果报文太长,那么IP层就需要分片,降低效率,若太短了,是IP太小。

面向字节流的传输方式就是,虽然应用程序和TCP交互是一次一个数据块(大小不等),但TCP把应用程序看成是一连串的无结构的字节流,TCP有一个缓冲,当应用程序传送的数据块太长,TCP就可以把它划分短一些再传送。

TCP和UDP的应用

技术图片

 

什么时候用TCP?

对网络通讯质量要求高的时候,比如:整个数据要准确无误的传递给对方,这往往用于一些要求可靠的应用,比如HTTP、HTTPS、FTP等传输文件的协议,POP、SMTP等邮件传输的协议。

什么时候用UDP?

当对网络通讯质量要求不高的时候,要求网络通讯速度能尽量的快,这时就可以使用UDP。

七、DNS

DNS(Domain Name System,域名系统),因特网上作为域名和IP地址相互映射的一个分布式数据库,能够使用户更方便的访问互联网,而不用去记住能够被机器直接读取的IP数串。通过主机名,最终得到该主机名对应的IP地址的过程叫做域名解析(或主机名解析)。DNS协议运行在UDP协议之上,使用端口号53

八、TCP连接的建立和终止

1、三次握手

TCP面向连接的,无论哪一方向另一方发送数据之前,都必须要在双方之间建立一条连接。在TCP/IP协议中,TCP协议提供可靠的连接服务,连接是通过三次握手进行初始化的。三次握手的目的是同步连接双方的序列号确认号交换TCP窗口大小信息

第一次握手,建立连接,客户端发送连接请求报文,将SYN(同步)=1,Seq(Sequence Number,序列号)=x。然后客户端进入SYN_SEND状态,等待服务器确认。

第二次握手,服务器收到SYN报文段。

  • 服务器需要对这个报文段继续确认,设置ACK(Acknowledgement Number) = x+1;
  • 同时自己还要再发送SYN请求信息,将SYN=1,Seq=y;
  • 服务器端将上述所有信息放到一个报文段内(SYN+ACK+Seq报文段),一起发送给客户端,此时服务器进入SYN_SEND状态。

第三次,客户端收到服务器的SYN+ACK报文段。然后将ACK=y+1

 

以上是关于TCP/IP的主要内容,如果未能解决你的问题,请参考以下文章

TCP/IP协议组——完整工作过程分析

计算机网络基础之笔记二(TCP/IP)

CCNA 之 TCP/IP 及 子网划分

localhost和127.0.0.1的区别

Http,socket和TCP/IP的关系

HTTP笔记_01_HTTP相关的协议