TCP编程
基于大脑遗忘特性,还有就是周五有家公司电话面试我,我一开始给回答错了的原因,在这儿呢,我再强调和复习一下TCP/IP模型。
TCP/IP模型共计 4 层,与OSI模型的七层不一样,TCP/IP更简单和高效。
那我们说OIS模型复杂一下,那么我们先说说OSI模型有哪些吧?
1. OSI模型:
- 物理层 ————————干嘛的?用网线什么的将两个台电脑连起来,然后通过高低电频传递0/1电信号
- 数据链路层————————干嘛的?无规则的
1000011
看不懂,甚至可能还有错误,怎么搞?链路层的作用来了。
数据链路层将无规则的'011000011'
进行协议检测,数据对,则通过且打包成帧,不对,重新发。
还需要控制发送方的发送速率,保证通过链路层的数据无差错地传递 - 网络层 ————————干嘛的?为网络上的不同主机提供通信。具体地说,数据链路层的数据在这一层被转换为数据包,
然后通过路径选择、分段组合、流量控制、拥塞控制等将信息从一台网络设备传送到另一台网络设备。 - 传输层 ————————干嘛的?前三层是数据通信,后三层是数据处理。运输层是第四层,承上启下。网络层只是传到了各个主机(网络设备)
运输层还要控制到具体的程序,所以:第一,提供可靠的端到端(进程到进程)的通信;第二,向会话层提供独立于网络的运输服务。 - 会话层 ————————干嘛的?管理主机之间的会话进程,即负责建立、管理、终止进程之间的会话。
会话层还利用在数据中插入校验点来实现数据的同步。 - 表示层 ————————干嘛的?表示层对上层数据或信息进行变换以保证一个主机应用层信息可以被另一个主机的应用程序理解。
表示层的数据转换包括数据的加密、压缩、格式转换等。 - 应用层 ————————干嘛的?应用层为操作系统或网络应用程序提供访问网络服务的接口。
OSI模型我们已经讲完了,虽然包括我在内的很多人一时之间也记不准,甚至还容易弄混乱,但多复习,总有一天会好的。
接下来,我们讲讲 TCP/IP模型:
2.TCP/IP模型:
- 网络接口层————————干嘛的?负责将二进制流转换为数据帧,并进行数据帧的发送和接收.
- 网络层 ————————干嘛的?负责在主机之间的通信中选择数据包的传输路径,即路由。网络层还要负责处理传入的数据包、
检验其有效性,最后还需要根据需要发出还是接收ICMP差错和控制报文 - 传输层 ————————干嘛的?负责实现应用程序之间的通信服务,又叫端到端通信。传输层要系统的管理信息的流动、还要提供
可靠的传输协议,确保数据到达无差错、无序乱。 - 应用层 ————————干嘛的?把封装好的数据提交给传输层或者是从传输层接受数据并处理。
小结一下:我们看TCP/IP模型可以看出,TCP/IP的网络接口层对应OSI模型的物理层和数据链路层,网络层对应OSI的网络层, 传输层对应传输层,应用层对应OSI的会话层、表示层、应用层。
思考: 在前面的OSI模型中的数据链路层中,我们讲到链路层的作用,
在网络层中我们提到路由的概念,那我们常听到的交换机和路由器到底在模型中的哪一层呢?
(我之前听过多次,但没有接触过交换机,家里也在用路由器,但真没了解过,面试问到都是自己推理出来的,现在我们去了解一下,当然,也只是粗略的说说原理,具体的还是后面再去深究,感觉并不简单。)
-
首先,我们需要弄清楚交换机是什么?路由器是什么?
1. 交换机:https://baike.baidu.com/item/交换机/103532
2. 路由器:https://baike.baidu.com/item/路由器
然后根据《计算机网络自顶向下方法》中扩述,我进行理解为交换机主要在于数据交换,即使现在很多多层交换机,
但交换机的主要作用还是在于特定网络内的数据交换,路由器主要在于寻址路由,实现不同网络之间的数据转发。 -
路由器和交换机位于什么位置?
路由器位于网络层,毕竟主要是实现最佳路由的数据转发。
交换机得分情况,据《计算机网络自顶向下方法》P15
介绍交换机分:
1.路由器;
2.链路层交换机。
路由器不再讲,链路层交换机当然就是在数据链路层了,位于TCP/IP模型的网络接口层。 -
路由和交换机的原理和具体过程,本次就暂不介绍了,我自己也还不清楚,有时间了我再好好学习,整理整理发出来。
3. socket编程的基本函数
-
socket()
:创建套接字,同时制定协议和类型 -
bind()
:绑定本机 (IP + port
) + 套接字,主要用于服务器,客户端不需要绑定。 -
listen()
:设置监听,将套接字设置为监听模式,准备接受客户端的连接请求 -
accept()
:接收TCP
,服务器调用accept()
等待接收客户端的连接,建立好后返回一个新的连接套接字 -
connect()
:建立连接,客户端通过该函数向服务器的监听套接字发送连接请求 -
send()
:TCP
发送数据,也可以用在UDP
中 -
recv()
:TCP
接收数据,也可以用在UDP
中 -
sendto()
:UDP
发