mac地址、IP地址和端口号
看了很多遍,才整理出来我对整个通信过程的理解,大致如下,后期会不断学习补充更正:
在利用TCP/IP协议族进行通信的时候,有三个比较关键的确认身份的信息:mac地址、IP地址和端口号。
- mac地址是在数据链路层包裹在以太网头部中的,它主要用来识别同一个链路中的不同计算机。Mac地址即网卡号,每块网卡出厂的时候,都有一个全世界独一无二的 MAC 地址,长度是 48 个二进制位,通常用 12 个十六进制数表示。
- IP地址是在网络层的IP头部里,用于识别网络中互联的主机和路由器,其实主要是确认子网,通过子网掩码确认某个IP地址所在的子网,而后再在子网内部确认mac地址就能找到准确的用户了。
- 端口号是在传输层包含在TCP/UDP头部中的,用于识别应用程序。一台主机上能运行多个程序,那么接收到的消息到底是哪个程序的呢?就需要端口号来确认。
端口号有两种:
- 固定的端口号,是形如http,telnet,ftp等广为使用的应用协议所使用的端口号是固定的
- 动态分配的端口号,这个时候服务端要确定监听端口号,接受服务的客户端没必要确定端口号
端口号由传输层协议决定,因此不容传输协议可以使用相同的端口号,所以TCP和UDP可以使用同一个端口号

例如,主机A向主机B利用发送了一条消息,则在TCP head里包含了发送消息的应用的端口号以及接收方应用的端口号,传递给它的下一层,网络层会将TCP数据包封装起来再加自己的头部,IP头部里包含本地IP以及接收方IP等信息传递给数据链路层。数据链路层会再给加一个以太网头部,这里包含双方的mac地址。那么对方IP和端口号都好得到,可是mac地址如何获得呢?这个时候需要ARP协议,这个暂且不说,直说在已知mac地址和IP地址端口号情况下如何发送消息。
首先以太网数据包会在其子网内部广播,如果接收方在其子网内,则在比对mac地址后直接接收数据。如果不在同一个子网内,以太网协议就不能实现数据传输了,而且因为以太网协议采取广播的方式发送消息,就算没有局限在子网内,如果给非常庞大的主机群广播消息是非常可怕的。这个时候就需要IP地址了,IP地址主要是用来区分哪些mac地址在同一个子网。找到目的主机所在子网之后再根据mac地址确认主机,IP层从IP首部确定数据包所用的协议之后将数据包交给对应的协议,再由协议来确认程序的端口号,从而实现了消息的传递
mac地址、IP地址和端口号的更多相关文章
- 彻底明白IP地址——IP地址的介绍
彻底明白IP地址——IP地址的介绍 [ 作者:担子 转贴自:赛迪网 点击数:9692 更新时间:2004-12-22 ] IP地址的介绍 1.IP地址的表示方法 IP地址 = ...
- winform C#获得Mac地址,IP地址,子网掩码,默认网关
1.添加程序集 2.引入命名空间 using System.Management; 3.方法 ManagementClass mc = new ManagementClass("Win32_ ...
- MAC地址IP地址网关地址
MAC地址与IP地址区别 IP地址和MAC地址相同点是它们都唯一,不同的特点主要有: 对于网络上的某一设备,如一台计算机或一台路由器,其IP地址是基于网络拓扑设计出的,同一台设备或计算机上,改动IP地 ...
- mac下ip地址重定向
在终端临时使用最高权限用vim编辑/etc下的hosts文件,若提示Password: 输入开机登录密码并回车: yanguobindeMacBook-Pro:~ yanguobin$ sudo vi ...
- 本地连接图标消失;修改地址IP地址
(1)网络连接中没有本地连接,电脑无法进行拨号.无法上网,右键点击“网上连接”选择“属性”,弹出的“网络连接”文件夹中没有本地连接的图标,类似情况处理起来要相对复杂些了,我们逐一判断故障原因,在想办法 ...
- linux 下查看硬件信息(mac,IP地址,硬盘型号,序列号等)
一.查看网卡mac地址 #安装lshw [root@server ~]# yum install lshw #使用方法 [root@rsync-server ~]# lshw -c network * ...
- mac ping ip地址
Mac下有个类似于Windows下CMD的模式叫做终端,但是这个模式和Windows下的CMD有着很大的差别. 工具/原料 Mac电脑一台 方法/步骤 首先通过菜单栏的搜索功能找到“终端”,也可以 ...
- ping指定IP的指定端口号
ping是简单的测试网络连接情况的小工具,对于一般用户很实用,但是ping有个缺点就是,不能指定端口 tcping命令是针对tcp监控的,也可以看到ping值,即使源地址禁ping也可以通过tcpin ...
- mac 下修改jenkins的 端口号
sudo defaults write /Library/Preferences/org.jenkins-ci httpPort 7070
- 同一个ip,不同端口号,cookie会被覆盖
参考资料:https://blog.csdn.net/czh500/article/details/80420459
随机推荐
- vwampserver2.5-apache2.4.9允许外部访问的配置
打开..\wamp\bin\apache\apache2.4.9\conf\httpd.conf配置文件, <Directory "c:/wamp/www/"> ...
- Android Fragment 生命周期及其API使用(建议使用自定义View替换Fragment)
我为什么不主张使用Fragment Fragment:( Fragment就相当于一个有生命周期的View,它的生命周期被所在的Activity的生命周期管理 ) 生命周期回调说明: onAttach ...
- NOIP 2013 货车运输【Kruskal + 树链剖分 + 线段树 】【倍增】
NOIP 2013 货车运输[树链剖分] 树链剖分 题目描述 Description A 国有 n 座城市,编号从 1 到 n,城市之间有 m 条双向道路.每一条道路对车辆都有重量限制,简称限重.现在 ...
- 【BZOJ】2253: [2010 Beijing wc]纸箱堆叠
题意 三维严格偏序最长链.(\(n \le 50000\)) 分析 按第一维排序然后以第二和第三维作为关键字依次加入一个二维平面,维护前缀矩形最大值. 题解 当然可以树套树....可是似乎没有随机化算 ...
- qt播放器
播放器 http://blog.csdn.net/foruok/article/details/39005703 图片 http://blog.csdn.net/liyinhuicc/article/ ...
- Bootstrap_让Bootstrap轮播插件carousel支持左右滑动手势的三种方法
Bootstrap 的 carousel.js 插件并没有支持手势. 3种解决方案 : jQuery Mobile (http://jquerymobile.com/download/) $(&quo ...
- Linux多线程实例练习 - pthread_create()
Linux多线程实例练习 pthread_create():创建一个线程 int pthread_create(pthread_t *tidp, const pthread_attr_t *attr, ...
- 索引器、哈希表Hashtabl、字典Dictionary(转)
一.索引器 索引器类似于属性,不同之处在于它们的get访问器采用参数.要声明类或结构上的索引器,使用this关键字. 示例: 索引器示例代码 /// <summary> /// 存储星 ...
- Node.js的函数返回值
先看一段代码: function select(sqlscript){ var result = ""; sql.connect(config, function( ...
- SQL中的with as
一.WITH AS的含义 WITH AS短语,也叫做子查询部分(subquery factoring),可以让你做很多事情,定义一个SQL片断,该SQL片断会被整个SQL语句所用到.有的时候,是为了让 ...