您的位置:首页 > 理论基础 > 计算机网络

一个Php菜鸟的TCP/IP协议学习总结(概述)

2017-12-14 11:34 459 查看
学习初衷:

前段时间用php socket 做实时聊天,对tcp/ip协议有个简单了解,近来直播貌似很火,于是计划做一个简单的直播功能练练手,还有一个原因是想用C语言给自己的php加一个简单网络通信的扩展,觉得有必要对TCP/IP协议族进行学习,不然一直只停留在写应用层代码阶段,没点技术含量。把自己的学习心得分享给大家,共同进步。写的有点粗略,先做一个概述,后续会对tcp协议进行深入学习,分享心得。



tcp和UDP都是传输层协议,tcp:一般用于用于网络上端到端的数据通信,tcp提供可靠传输。

对比

tcp要先建立会话连接,

UDP不用建立会话, UDP不提供可靠传输。可见UDP比tcp效率高,应用场景也不一样。

举例:1)访问网站要先建立会话,由于返回的数据流往往很大,所以要把数据流分割再传输,就必须基于tcp进行可靠传输避免丢包和进行一系列的包处理。

(2)访问dns服务器得到ip地址,通常一个数据包就能解决,udp就很适合,不用先建立会话。

应用服务和tcp:一般的计算机应用服务都是基于TCP协议,通信两端每一端都有可能有很多基于TCP的服务同时运行,因此为了区分两端的应用服务,每个服务都对应着TCP的一个端口号,例如web服务通常对应着tcp的80端口,服务运行时会监听tcp的80端口(为了好理解,可以理解为,有着80端口标志的tcp协议)。

应用协议和tcp: 例如http协议对应着tcp的80端口,https协议对应着tcp的443端口

http=tcp+80. https=tcp+443。

 

Tcp/ip协议在osi模型上是四层上三层合并为一层(应用层),数据链路层和物理层合并为链路层。每一层都为上层服务。

记一次数据发送:当应用层产生数据交互时,http协议会对数据进行包装和处理说明,

1.传输层:保证端到端的数据能够正确传输(比如PC浏览器和服务器80端口通信),由于传输数据大小有限制,传输层会把应用层的数据进行分段、编号、等一系列处理,分多块传输,具有出错重传、流量控制功能,到达另一端后会根据编号重组数据,给应用层解析。

2.网络层:传输层分割后的数据段给网络层传输,网络层把数据段装成ip数据包并编号进行传输,ip包由:首部 +源ip+目标ip+传输层数据段,组成。负责把数据包从源ip传送到目标ip, 不提供可靠传输(例如丢包),只具有传输功能。网络节点之间的传输需要识别MAC地址,同一网段中ARP协议通过广播方式获取目标MAC地址或者网关的MAC地址。在传输的路由上Rip协议可以广播的方式找到下一步的传输路由地址,路由器具有学习功能会把地址加入路由表(也叫动态路由),RARP协议和ARP相反:可根据物理地址得到ip地址。

3.ICMP协议可检测网络层的状况,比如ping命令就是基于ICMP协议

4.IGMP协议是 组播-多播,一般用于流媒体例如,客户端绑定一个多播地址并建立连接,就可以观看源信息流。

5.数据链路层:都知道:我们一般网络传输都是从局域网到以太网的跨网段传输,之间必然是点到点的传输,最终到达目标Ip,点到点之间的传输需要识别MAC地址,ip包不能直接传输,因为ip包没有MAC地址,所以还需要封装成数据帧才能正确传输,如果ip包过大会先分为数据片并编号,然后再包装成数据帧传输到达目标IP后再重组,数据帧: 帧首部+源MAC地址+目标MAC地址+ip包+FSC(帧效验:效验数据帧的完整性)

各层大致如下

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  tcp web php socket