网络中两台主机的通信过程(TCP)

两台主机通信有两种情况:1.在同一网段中 2.不在同一网段中

(1.)在同一网段的通信过程

主机在应用层上的操作:

  TCP/IP协议上tcp的端口对应的各种应用程序,客户机要访问某个应用程序就会要求打开主机的这个固定的端口。而客户机自己会打开一个大于1024的随机端口用来跟对方的主机进行通信。用户使用应用程序编辑信息,一个单一的会话,实际上就是一个主机应用层之间的逻辑的软件连接。

主机在传输层的操作:

  对数据分段(Segment),添加TCP报头(包含源端口,目的端口,顺序号等)

分段的原因:

(A):可同时多个应用程序发送数据。

(B):数据包过大产生错误时,还需重新传送,即占带快又占时间,小数据包对数据流影响就小很多。

(C):各种网络传输介质有其最大的传输单元限制,不允许在网络上出现巨大的数据包。

主机在网络层的操作:

  当传输层为数据分段添加了TCP头之后,将数据下发给网络层处理。网络层会为传输层传来的数据包添加IP报头(包含源IP地址,目的IP地址)封装成数据包

主机在数链路层的操作:

  数据链路层在数据包的前面封装上数据帧头,在数据包的后面封装上校验位,从而把数据包封装成数据帧。(添加源MAC地址和目的MAC地址,如果主机不知道目标MAC地址则想交换机发送ARP广播从而得到目标MAC地址)

主机对物理层的操作:

将从逻辑链路层发送过来数据帧转换成能在物理线路上传输的电子信号,传递给网络上的转发设备交换机,由交换机进行处理。

交换机对数据帧的处理:

交换机接收到数据流后根据发送过来的数据帧的MAC地址查找目的主机,将数据发送给目的主机。转发过程不改变数据帧结构。

目的主机接收到数据帧的操作:

当目的主机接收到数据帧后对比目的MAC,如是发送给自己的,则拆去数据帧头,发往网络层,网络层对比目的IP,如相同则拆包发往传输层,传输层再对比目的端口,确认相同则拆去数据段交给应用程进行数据组装。

 

(2.)位于不同网段上的两台主机之间的通信过程

主机A上的工作:

由于主机A和主机B并不在同一个网段,主机A是不可能通过ARP解析到主机B的MAC地址的,同时,主机A也是一个没有路由能力的网络节点,所以主机A是不可能依靠自己的力量把数据发送到主机B上去的。主机A必须依靠网络中的路由器将数据包路由到相应的目的网络。

  主机A网络配置:配置自己IP和子网掩码 同时配置网关(谁为主机提供访问其他网段的可能,默认网关就填谁的IP地址。‘路由器、代理服务器’)

  [DNS:DNS提供目的地址的域名解析,如在局域网的不同网段内,可填本局域网内的DNS服务器。如果访问INTERNET外网的域名,则填写ISP的DNS服务器。]

填写了默认网关之后,主机A通过ARP解析,就可以知道路由器A的MAC地址。当主机A要向主机B发送文件时,就可以通过路由器A将数据包发送到目的地。

例: 主机A发送数据到其他网段的B主机过程。

1.主机A应用层数据到传输层被分段,打上TCP头(含源端口,目的端口),再向下发给网络层,打上IP地址(含源IP,目的IP),再向下发送给数据链路层,打上数据帧(含源MAC,目的MAC),由于不知道目的MAC,则在MAC上打上于网关(路由器接口)的MAC地址,发往路由器A。

2.路由器A收到消息后,重新封装数据帧(得知发送到B主机需要经过路由器B),于是修改源MAC地址为路由器A的MAC地址,目标地址为B的MAC地址,(路由器A进行NAT地址转换)

3.路由器B收到路由器A的信息,核对地址,检查IP,修改MAC,源MAC改为路由器B的MAC,(假如主机B在路由器B的子网中)目标MAC填写主机B的MAC,即下一步将信息发送给主机B。

4.主机B接收到数据后对数据拆帧、包,TCP头,检查其目的地址与校验,重新整合这些数据流之后,将这个数据流传递给应用层处理。

大体思路就是以上部分,学习之后再补充,2016.11.30 22:43

时间: 2024-10-02 07:27:24

网络中两台主机的通信过程(TCP)的相关文章

网络中两台主机通信的完整过程

主机A和主机B通信报文的转发过程 1.主机A和主机B在同一个二层网络中,直接走二层交换 主机A查看自己的ARP缓存,检查是否有主机B的IP到MAC的映射,如果有映射,构造报文,目的IP为主机B的IP,源IP为主机A的IP,目的MAC为主机B的MAC,源MAC为主机A的MAC,将报文发送给交换机C,交换机C进行MAC地址表学习,将主机A的MAC和报文入端口号记录下来,然后交换机C查看自己的MAC转发表,检查是否有主机B的MAC到端口的映射,如果有映射,获取对应的端口,将报文从此端口转发出去,报文到

Winpcap网络编程十之Winpcap实战,两台主机通过中间主机通信

注:本篇博客同样不针对于伸手党,源代码等等的我不会完全公开的,此篇文章写出来为大家的网络编程或者课程设计提供一定的思路.. 好,本次我们需要完成的任务是: 完成两台主机通过中间主机的数据通信(网络层) 增加基于IP地址的转发功能 增加网络层封装 其实最主要的就是基于IP地址的转发功能,网络层的封装其实我们在初级功能中就已经做好了. 首先,实验的思路是A通过中间主机B向C发送数据.那么B则作为一个路由器,B要监听两个网卡,一个网卡发来的数据通过另一个网卡发出去. 示意图如下: A---------

两台主机之间单向Ping不通的问题

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px ".PingFang SC"; color: #454545 } p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px "Helvetica Neue"; color: #454545; min-height: 14.0px } span.s1 { font: 12.0px "Helvetica Ne

让两台主机通过四个路由器互通

让两台主机通过四个路由器互通 网络拓扑图如下: 环境准备:需要在vmware虚拟机中克隆6台虚拟机,每台系统环境为centos6.9 ,每台分配的最小内存为256M. R1,R2,R3,R4 这四台主机需要开启路由转发功能:vim /etc/sysctl.confnet.ipv4.ip_forward = 1sysctl -piptables -F克隆机需要重新更改网卡的名字.1.cat /etc/udev/rules.d/70-persistent-net.rules 2.将上述文件中的mac

rsync + inotify 实现两台主机间文件的同步备份

前面一篇博文介绍了rsync的主要使用及工作于服务器模式下的安装.配置.inotify是Linux内核中监控文件系统的一种事件机制,它负责监视文件系统的变化.如文件的创建.修改.删除等,并以事件的方式通知给应用程序.inotify-tools是一个基于内核的inotify机制为用户提供实现对文件系统的事件进行监控功能的应用程序组件. inotify实现的对文件系统监视的事件: IN_ACCESS:文件被访问 IN_MODIFY:文件被修改 IN_ATTRIB,文件属性被修改 IN_CLOSE_W

ROS中两台机器时钟同步

两台机器同时运行过程中,对于ROS的tf变换,其要求两台机器的时钟要保持一致. 1.查询时间 首先通过以下命令,看两台机器时钟是否有差异.在本机上,查看远程master的机器时间: ntpdate -q other_computer_ip 例如 ntpdate -q 192.168.0.23 或者在终端直接输入date命令可以查询本机的时间: date 2.安装chrony 执行如下命令: sudo apt-get install chrony 3.配置 然后编辑配置文件: sudo gedit

怎么用一个显示器来显示和控制两台主机

要实现用一套键盘鼠标显示器来控制两台主机,方法很简单,只需要一个小型的设备来帮助——两个端口的KVM切换器.两个端口的KVM切换器.KA1302 是一个2口线控USB KVM切换器,使用者可将主装置放于桌面下,通过按键Scroll-Lock或通过其外接一个切换按键保留于桌面,即可简单且快速地切换电脑. 工具/原料 一个两口KVM切换器KA1302 一条按键线 在开始安装前,请确认你将连接的所有设备的电源已关闭为避免安装过程造成设备损坏,请先确认所要连接的设备均已适当接地. 将键盘.显示器和鼠标连

Python获取网络中的存活主机以及哪些主机是Linux

这个脚本用于扫描网络中的存活主机,通常在CMDB中自动获取主机的时候用到. #!/usr/bin/env python # -*- coding: utf-8 -*- """ 执行这个脚本的主机要安装下面两个模块 pip3 install python-nmap 这个Python模块依赖操作系统的nmap 确保操作系统安装了nmap yum -y install nmap # for centos 主要功能:扫描网段获取存活主机以及主机是否为Linux.不是Linux的被标记

<两台主机之间日志的同步>

首先要知道两台主机之间同步文件udp虽然安全性不高,但是它的同步速率远远高于tcp.这点是不可否认的. 我们以简单的为例: 服务端: 允许别的主机可以把日志同步到自己的主机上来. # vim /etc/rsyslog.conf $ModLoad imudp  //开启udp协议,添加udp模块. $UDPServerRun 514 /etc/init.d/rsyslog restart 重启使配置生效 # tail -f /var/log/messages  //动态监控日志 客户端 把日志往哪