TCP/IP协议 - jerry

Welcome to Aiiyx !

TCP/IP协议

TCP/IP(Transmission Control Protocol/Internet Protocol)的简写,中文译名为传输控制协议/因特网互联协议,又叫网络通讯协议,这个协议是Internet最基本的协议、Internet国际互联网络的基础,简单地说,就是由网络层的IP协议和传输层的TCP协议组成的。 

此图像的alt属性为空;文件名为image-54.png

1、传输层协议

在网络上的通信有这两种情况:

  1. 一种情况是一个数据包就能完成通信任务,例如QQ聊天,一个数据包就能完成任务。
  2. 一种情况是一个数据包不能完成的通信任务。比如QQ传文件,需要将文件分段,编号,然后再传递到客户端。

TCP/IP协议栈,传输层有两个协议TCP和UDP。

  1. TCP(Transmission Control Protocol,传输控制协议)协议,一个数据包不能完成通信任务的通信大多使用TCP协议。
  2. UDP(User Data Protocol,用户数据报协议)协议,一个数据包就能完成任务大多使用UDP协议,不可靠传输,不建立会话,数据不分段,不编号。

1.1、TCP

传输控制协议(TCP)通常从应用程序中得到大段的信息数据,然后将它分割成若干个数据段。

TCP会为这些数据段编号并排序,这样,在目的方的TCP协议栈才可以将这些数据段再重新组成原来应用数据的结构。

由于TCP采用的是虚电路连接方式,这些数据段在被发送出去后,发送方的TCP会等待接收方TCP给出一个确认性应答,那些没有收到确认应答的数据段将被重新发送。 

当发送方主机开始沿分层模型向下发送数据段时,发送方的TCP协议会通知目的方的TCP协议去建立一个连接,这种通信方式被称为是面向连接的。

在这个初始化的握手协商期间,双方的TCP层需要对接收方在返回确认应答之前,连续发送多少数量的信息达成一致。

TCP是一个全双工的、面向连接的、可靠的并且是精确控制的协议,但是要建立所有这些条件和环境并附加差错控制,在网络开销方面是昂贵的。

然而,由于如今的网络传输同以往的网络相比,已经可以提供更高的可靠性,因此,TCP所附加的可靠性就显得不那么必要了。

1.2、 用户数据报协议(UDP)

UDP协议适用于一个数据包就能完成的数据通信任务,比如QQ聊天发送的数据,域名解析(DNS)

这类通信不需要在客户端和服务器端建立会话,节省服务器资源。

UDP协议也广泛应用到多播和广播应用,比如多媒体教室程序将屏幕广播给学生的计算机,教室中的计算机接收教师计算机电脑屏幕。

这类通信虽然一个数据包不能完成数据包通信,但是这类通信不需要客户端和服务器端连接会话。

UDP不排序所要发送的数据段,而且不关心这些数据段到达目方时的顺序,在发送完数据段后,就忘记它们,它不去进行核对数据,或安全抵达确认的后续工作,它完全放弃了可以保障传送可靠性的操作。

正是因为这样,UDP被称为是一个不可靠的协议。但这并不意味着UDP就是无效率的,它仅仅表明,UDP是一个不处理传送可靠性的协议。

UDP不去创建虚电路,并且在数据传送前也不联系对方,正因为这一点,它又被称为是无连接的协议。

由于UDP假定应用程序会保证数据传送的可靠性,因而它不需要对此做任何的工作。

传输层协议添加端口就可以标识应用层协议。应用层协议代表着服务器上的服务,服务器上的服务如果对客户端提供服务,必须在TCP或UDP端口侦听客户端的请求。

2、应用层协议

传输层的协议TCP或UDP加上端口就可以标识一个应用层协议,TCP/IP协议中的端口的范围是从0 到65535。

服务器一般都是通过知名端口号来识别的。对于每个TCP/IP实现来说,FTP服务器的TCP端口号都是21,每个Telnet服务器的TCP端口号都是23,每个TFTP(简单文件传送协议)服务器的UDP端口号都是69。任何TCP/IP实现所提供的服务都用知名的1~1023之间的端口号

知名端口即众所周知的端口号,范围从0到1023,这些端口号一般固定分配给一些服务。比如21端口分配给FTP(文件传输协议)服务,25端口分配给SMTP(简单邮件传输协议)服务,80端口分配给HTTP服务,135端口分配给RPC(远程过程调用)服务等等。

  1. HTTP默认使用TCP的80端口标识
  2. FTP默认使用TCP的21端口标识
  3. SMTP默认使用TCP的25端口标识
  4. POP3默认使用TCP的110端口
  5. HTTPS默认使用TCP的443端口
  6. DNS使用UDP的53端口
  7. 远程桌面协议(RDP)默认使用TCP的3389端口
  8. telnet使用TCP的23端口
  9. Windows访问共享资源使用TCP的445端口

总结:数据包中的目标IP地址用来定位服务器,而数据包中的目标端口用来定位服务器上的服务。

查看远程桌面侦听的端口

  1. 运行netstat –an可以看到在TCP和UDP侦听的端口
  2. 输入netstat –anb还可以看到侦听端口的进程或程序
  3. 启用远程桌面查看打开的3389端口 
  4. Netstat –aonb 这个命令查看侦听的端口以及侦听端口的进程号和应用程序名字.

Web服务、FTP服务、SMTP服务、POP3服务、远程桌面服务和DNS服务 等均是应用层上的服务。

3、网络层协议

在TCP/IP协议栈中网络层有四个协议 因特网协议IP、 因特网控制报文协议 IGMP、ICMP和 地址解析协议 ARP, 逆向地址解析 RARP协议。

3.1 IP协议

IP是英文Internet Protocol(网络之间互连的协议)的缩写,也就是为计算机网络相互连接进行通信而设计的协议。

在因特网中,它是能使连接到网上的所有计算机网络实现相互通信的一套规则,规定了计算机在因特网上进行通信时应当遵守的规则。

任何厂家生产的计算机系统,只要遵守 IP协议就可以与因特网互连互通。

因特网协议(IP)其实质就是因特网层,其他的协议仅仅是建立在其基础之上用于支持IP协议的。

相互通信的计算机和网络设备必须统一规划网络层地址,即IP地址。IP关注每个数据包的地址,网络层设备通过使用路由表,IP可以决定一个数据包将发送给哪一个被选择好的后续最佳路径,那些动态路由协议(RIP、EIGRP和OSPF协议都是IP协议)。

计算机A和计算机B通信过程

  1. A计算机首先判断B计算机的IP地址和自己的IP地址是否在一个网段,即网络部分是否相同,发现不在一个网段,数据包应该发送给有Router1,再有Router1转发。
  2. 计算机A配置了网关10.0.0.1,A计算机发出去的数据帧源IP地址为10.0.0.2,目标IP地址为12.0.0.2,源MAC地址为M1,目标MAC地址为M2。这样交换机SW1将会根据MAC地址表将数据帧转发到路由器Router1的接口。
  3. 路由器Router1查看数据包的目标IP地址,根据路由表,决定数据包下一跳应该发往何处。本示例Router1将数据包转发到Router2。Router1将数据帧的目标MAC地址更改为M4,源MAC地址更改为M3,这样Router2就能接受该数据帧。
  4. 同样路由器Router2接收到数据帧后,查看数据包的目标IP地址,根据路由表转发,数据帧的源MAC地址更改为M5,目标MAC地址更改为M6。这样数据帧就能够被交换机SW2转发到计算机B。

数据包传输过程

IP数据报的格式

一个IP数据报由首部和数据两部分组成,首部的前一部分是固定长度,共20字节,是所有IP数据报必须具有的。在首部的固定部分的后面是一些可选字段,其长度是可变的。

3.2 ICMP协议

ICMP是(Internet Control Message Protocol)Internet控制报文协议。它是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。

当遇到IP数据无法访问目标、IP路由器无法按当前的传输速率转发数据包等情况时,会自动返回相应的ICMP消息。

在计算机上检测网络层故障经常用到的ping和pathping命令就是使用ICMP协议

PING(Packet Internet Grope),因特网包探索器,用于测试网络连接量的程序。Ping发送一个ICMP回声请求消息给目的地并报告是否收到所希望的ICMP回声应答。
ping指的是端对端连通,通常用来作为可用性的检查, 但是某些病毒木马会强行大量远程执行ping命令抢占你的网络资源,导致系统变慢,网速变慢。 严禁ping入侵作为大多数防火墙的一个基本功能提供给用户进行选择。

通过延迟评估网络带宽 :

使用ping能够判断网络通还是不通,比如请求超时,你就不能判断什么位置出现的网络故障造成的请求超时。

使用pathping命令能跟踪数据包的路径,能够查出故障点,并且能够计算路由器转发丢包率和链路丢包率以及延迟,据此能够判断出网络拥塞情况。

由上图可以看到数据包到达目的地途经的路由器和计算的延迟和丢包率。丢包率有路由器转发丢包率,如图D处所示丢包率是路由器收到数据包后路径选择转发时的丢包率,转发丢包率高则表明这些路由器已经超载,表明路由器的处理能力不够。还有链路丢包率,如图E处所示,是指的路由器B到路由器C链路上的丢包率,链路上的丢包率反应的是造成路径上转发数据包丢失的链路拥挤状态。

3.3 ARP协议

4、应用层协议

每个应用层协议都是为了解决某一类应用问题,而问题的解决又往往是通过位于不同主机中的多个应用进程之间的通信和协同工作来完成的。应用层的具体内容就是规定应用进程在通信时所遵循的协议。

应用层的许多协议都是基于客户服务器方式。客户 (client) 和服务器 (server) 都是指通信中所涉及的两个应用进程。客户服务器方式所描述的是进程之间服务和被服务的关系。客户是服务请求方,服务器是服务提供方。

分享