数据链路层:
实现网卡接口的网络驱动程序,以处理数据在物理媒介上的传办理;
有两个常用的协议:
ARP:(地址解析协议)
RARP:(逆地址解析协议)
他们实现了ip地址和MAC地址之间的相互转换;
因为其上层,网络层是通过ip地址来寻址一台机器的;
网络层:
实现数据包的选路和转发,网络层的最核心协议是ip协议,ip协议 根据数据我的目的ip地址来决定如何抽递它;如果数据包不能直接发送给目标主机,那么ip协议就为它寻找另一个合适的路由器,多次重复这个过程,直到数据包最终到达目标主机,或者由于发送失败而被丢弃;
网络层还有一个生要的协议icmp:因特网控制报文协议,宁是ip协议 的重要补充,主要用于检测网络连接;
它会在发送的报文内容前加一个报文头,标明报文类型及校验字段等;
传输层:
为两台主机上的应用程序提供端到端的通信。
传输层有三个主要协议:
TCP(传输控制协议):为应用层提供可靠的,面向连接的和基于流(stream)的服务。通过超时重传,数据确认等来确保数据包被正确地发送到目的端 ,因此它是可靠的;双方必须先建立tcp连接,并在内核中为该连接维持一些必要的数据结构,如连接状态,读写缓冲区,定时器等。当通信结束,双方必须关闭连接来释放资源;
UDP(用户数据报协议):与tcp协议完全相反,它提供不可靠,无连接和基于数据报的服务;无法保证数据正确地传送到目的端;如果中途丢失,或者目的端通过数据校验发现数据错误而将其丢弃,则udp协议只是简单地通知应用程序发送失败,因此,使用udp协议的应用程序通常要自己处理数据确认,超时重传等逻辑。
udp协议是无连接的,双方不保持一个长久的的联系,因此就用程序每次发送数据都要明确指定接收端的地址(ip等)
SCTP(流控制传输协议)为了在网上传输电话信号而设计的。
应用层:负责处理应用程序的逻辑,如:文件传输,名称查询等,应用层协议很多,如:
ping(非协议,是应用程序),利用icmp报文检测网络连接;
telnet:远程登录协议
ospf:开放最短中径优先协议,用于路由器间的通信,以告知对方各自的路由信息;
DNS:域名服务协议,提供机器域名到ip地址的转换;
可以通过查看/etc/services文件查看所有知名的应用层协议;
TCP/UDP的优缺点:
TCP的优点:
TCP的缺点:
慢,效率低,占用系统资源高,易被攻击
TCP在传递数据之前,要先建连接,这会消耗时间,而且在数据传递时,确认机制、重传机制、拥塞控制机制等都会消耗大量的时间,而且要在每台设备上维护所有的传输连接,事实上,每个连接都会占用系统的CPU、内存等硬件资源。
而且,因为TCP有确认机制、三次握手机制,这些也导致TCP容易被人利用,实现DOS、DDOS、CC等攻击。
UDP的优点:
快,比TCP稍安全
UDP没有TCP的握手、确认、窗口、重传、拥塞控制等机制,UDP是一个无状态的传输协议,所以它在传递数据时非常快。没有TCP的这些机制,UDP较TCP被攻击者利用的漏洞就要少一些。但UDP也是无法避免攻击的,比如:UDP Flood攻击……
UDP的缺点:
不可靠,不稳定
因为UDP没有TCP那些可靠的机制,在数据传递时,如果网络质量不好,就会很容易丢包。
TCP/UDP应用场景:
基于上面的优缺点,那么:
什么时候应该使用TCP:
当对网络通讯质量有要求的时候,比如:整个数据要准确无误的传递给对方,这往往用于一些要求可靠的应用,比如HTTP、HTTPS、FTP等传输文件的协议,POP、SMTP等邮件传输的协议。
在日常生活中,常见使用TCP协议的应用如下:
那么什么时候应该使用UDP:
当对网络通讯质量要求不高的时候,要求网络通讯速度能尽量的快,这时就可以使用UDP。
比如,日常生活中,常见使用UDP协议的应用如下:
扩展阅读:
- 热门文章
- win7中将文件拷贝到虚拟机linux下
- phpexcel设置行高及列宽,背景颜色,
- rabbitmq无法启动
- intellij idea不显示git push按钮
- php7中使用mongodb的aggregate进行
- centos7.4 64位下swoole安装及配置
- laravel页面静态化的方法
- navicate连接mycat报1184错误
- 单点登录sso原理及php实现方式及de
- devops-jenkins容器为pending状态
- 好评文章
- phpexcel设置行高及列宽,背景颜色,
- php7中使用mongodb的aggregate进行
- intellij idea打开文件所在文件夹
- windows下使用MongoDB Compass Com
- win7中将文件拷贝到虚拟机linux下
- laravel 中悲观锁 & 乐观锁的使用
- 单点登录sso原理及php实现方式及de
- navicate连接mycat报1184错误
- rabbitmq无法启动
- laravel整合dingo/api方法步骤:jwt
- 我的项目
- 【github】www.github.com/hurong241
- 【码云】gitee.com/hu_rong/projects
- 【docker hub】hub.docker.com/repositories/hurong241
- 【packagist】packagist.org/users/hurong241/packages
- 站点信息
- 建站时间:2011年
- 文章数:607篇
- 浏览数:917440