两台主机通信有两种情况: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

NAT 参考:http://blog.csdn.net/cy_cai/article/details/35986855

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

  1. Linux下同一网段内的IP中两台主机通信不经过路由器(ARP)(转)

    答案一:同一网段A与B通信,不需要路由器介入. A直接广播ARP request 到广播域,B处于同一广播域,可以接收到ARP request,B用单播方式直接告诉A自己的MAC B 地址.A收到B的 ...

  2. Linux中两台主机配置互信关系

    服务名:sshd 客户端配置文件:/etc/ssh/ssh_config 服务端配置文件:/etc/ssh/sshd_config sshd服务需要重启才会生效 service sshd restar ...

  3. Python_架构、同一台电脑上两个py文件通信、两台电脑如何通信、几十台电脑如何通信、更多电脑之间的通信、库、端口号

    1.架构 C/S架构(鼻祖) C:client  客户端 S:server  服务器 早期使用的一种架构,目前的各种app使用的就是这种架构,它的表现形式就是拥有专门的app. B/S架构(隶属于C/ ...

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

    注:源码等等的我不会全然公开的,此篇文章写出来为大家的网络编程或者课程设计提供一定的思路.. 好,本次我们须要完毕的任务是: 完毕两台主机通过中间主机的数据通信(网络层) 添加基于IP地址的转发功能 ...

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

    p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 12.0px ".PingFang SC"; color: #454545 } p.p2 ...

  6. stp域中两台switch互联接口出现两口均为root口 并且在现有stp区域中无法确定根桥设备位置;分析其原因并赋予解决办法

    stp域中两台switch互联接口出现两口均为root口 并且在现有stp区域中无法确定根桥设备位置:分析其原因并赋予解决办法 1.于上图描述了案例中当前组网环境的各交换机位置与stp状态情况  : ...

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

    这个脚本用于扫描网络中的存活主机,通常在CMDB中自动获取主机的时候用到. #!/usr/bin/env python # -*- coding: utf-8 -*- ""&quo ...

  8. 【Linux学习笔记】用nc实现两台主机间的文件传输(不需要输密码)

    通常,可以用scp完成两台主机间的文件传输任务,但在主机间未建立信任关系的情况下,scp每次都需要输入密码,用起来感觉不是很方便,之前这篇笔记介绍过不用输入密码执行脚本或传输文件的方法,但对于一些临时 ...

  9. openStack 重新resize时会进行重新调度,可能在本机Resize 扩展资源,也可能存在的情况时 ,新扩展的资源在当前节点不足分配,整个虚拟机将进行迁移调度,进行异机迁移时需要迁移 的两台主机间能使用nova系统用户经passless登录

    openStack 重新resize时会进行重新调度,可能在本机Resize 扩展资源,也可能存在的情况时 ,新扩展的资源在当前节点不足分配,整个虚拟机将进行迁移调度,进行异机迁移时需要迁移 的两台主 ...

随机推荐

  1. apache ab测试命令详解

    这篇文章主要介绍了apache性能测试工具ab使用详解,需要的朋友可以参考下   网站性能压力测试是服务器网站性能调优过程中必不可缺少的一环.只有让服务器处在高压情况下,才能真正体现出软件.硬件等各种 ...

  2. android radiogroup样式(设置切换背景与文字颜色)

    main.xml <RadioGroup android:id="@+id/radioGroup1" android:layout_width="wrap_cont ...

  3. 标题栏Menu

    标题栏menu就是指下图中红框里面的菜单按钮. 标题栏上所有的按钮或者其他元素都定义在xml文件里面,这些文件资源称为menu resource.要在标题栏添加按钮,需要在项目的/res/menu/路 ...

  4. 每建一个Activity都要注册权限Manifest.xml

    每建一个Activity都要注册权限Manifest.xml 但是有时候自动注册好了,注意!不然的话是不能调用的!!!!!<activity android:name=".MainVi ...

  5. 【转】What is an SDET

    What is an SDET? SDET stands for Software Development Engineer in Test (or Software Design Engineer ...

  6. 从人类社会的角度看OO(独家视角)

    引言 在OO的工作中,我们一定会涉及到类,抽象类和接口.那么类和抽象类以及接口到底扮演的什么角色? 本文主要是从人类社会的角度阐述类与抽象类以及接口的"社会"关系,从而让我们抛弃书 ...

  7. 【原】HTML5 新增的结构元素——能用并不代表对了

    做移动端有一段时间,今天有同事问了我 article 和 section 标签的使用,模模糊糊的解释了下,他似懂非懂,有点小尴尬.忽然间觉得自己有必要再翻翻书籍,重温下 html5 的新元素.html ...

  8. Java反射特性--获取其他类实例并调用其方法

    1. 代码结构 .├── com│   └── test│   └── MyTest.java└── MainCall.java 2. 代码内容 MyTest.java: package com.te ...

  9. 解决“只能通过Chrome网上应用商店安装该程序”的方法

    摘要 : 最近有些用户反映某个Chrome插件在安装的时候,提示"只能通过Chrome网上应用商店安装该程序",为了解决这一问题,Chrome插件网带来了相关的解决方法. 某些用户 ...

  10. log4j.properties配置详解

    1.Loggers Loggers组件在此系统中被分为五个级别:DEBUG.INFO.WARN.ERROR和FATAL.这五个级别是有顺序的,DEBUG < INFO < WARN < ...