计算机通信网络发展路程
从独立模式到网络互连模式
起初,计算机以单机模式被广泛使用(这种方式也叫独立模式)。然而随着计算机的不断发展,人们已不再局限于单机模式,而是将一个个计算机连接在一起,形成一个计算机网络。连接多台计算机可以实现信息共享,同时还能在两台物理位置较远的机器之间及时传递信息。
计算机网络
计算机网络,根据规模分为WAN(Wide Area Network,广域网)和(Local Area Network,局域网)。
计算机通信协议参考模型:OSI七层参考模型
首先介绍OSI七层模型:(出现这一参考模型是因为发展前期各个厂商不断制造各种各样的协议,导致两台机器的通信会受到产商的影响导致无法通信,如协议不通,所以制造一个标准)
TCP/IP协议特点:
TCP/IP 协议特点有两点:面向连接的,安全可靠的。---------》 知道这两点就弄懂了TCP/IP协议
什么是面向连接的,面向无连接?
面向连接说的是两台计算机连接,需要先建立连接才能传输数据(犹如打电话,首先需要输入手机号码才能拨通,但是拨通并没有建立连接,接收方接听电话才算建立连接)。 面向无连接就是计算机传输数据不需要建立连接,两台计算机直接进行数据传输(犹如寄快递,只要你有收件地址,邮局就发出去,不管这个地址是否真实存在)。
建立连接由内核去控制,若应用层程序需要建立一个连接,告诉内核,内核会告诉传输控制层根据 源IP + PORT + 目IP + PORT 进行连接。一个网卡总共有65535个端口,即 目IP + PORT 固定,则源IP + PORT最多可以建立65535个连接。
建立连接如何来保证连接可靠性?若连接可靠性没办法保证,那与面向无连接有什么区别?
TCP/IP协议通过三次握手,四次挥手来保证连接可靠性。
三次握手
首先客户端应用程序会告诉传输控制层建立一个连接,此时传输控制层通过给的源IP + PORT + 目IP + PORT 进行连接
- 先会发送一个包数据SYN告诉服务端,我要与你连接。 --》 确认客户端发送功能是没有问题的
- 服务端接收数据后返回SYN+ACK 告诉客户端。 --》 ack 是回应客户端,你发送的内容我接收到了你的发送功能没有问题,另外我也要确认我服务端发送功能是否有问题。
- 客户端接收到SYN+ACK后再回一个ACK包给到服务端。 --》 接收对服务端传来的ack后,对于发送端来讲发送和接收是没有问题的,但是还要回复服务端ack目的是为了让服务端验证自己的发送是否有问题。
- 建立连接后内核开始开辟资源,包括输入输出队列。
四次挥手
- 首先客户端发送FIN包告诉服务端我现在不发数据了,但是可以接受数据。
- 服务端收到数据后回ack告诉客户端我知道你不发数据了 。
- 服务端发送FIN包告诉客户端我也不发数据了。
- 客户端收到后回复ack包
- 既然双方都不发数据了,取消连接,资源释放。
为什么要三次握手,四次挥手?挥手为什么要四次?
因为只需要三次握手双方就可以确保双方发送与接收正常。由于TCP/IP是全双工的,双方都有控制权自身是否需要发送和接收数据,所以关闭连接时,双方都要确认是否还继续发数据,同时确认信息发送后,也必须回复,才能安全可靠的去关闭连接。
补充几个问题
TCP/IP 协议是长连接还是短连接?
首先这个问题本身是有问题的,长连接还是短连接出现于应用层协议,即HTTP协议,在HTTP协议1.0支持短连接,HTTP协议2.0出现了长连接,即keepalives保证长连接啥时候关闭(有底层程序控制)
通过抓包分析工具可以分析数据传输是怎么进行的(TCP dump ,nc,curl )
如下面小测试:
首先输入 tcpdump -nn -i eth0 port 80 -》 这个命令监测本地80端口所有数据;
另外一个服务器通过curl www.baidu.com:80 --》 请求百度
效果如图
可以看到S -》 S. -》 . 其中S代表SYN ,.代表ack 下面也有F , . 可以去分析
有任何问题欢迎指出,参考 图解TCP/IP 一 书