1.硬件(物理层)
TCP/IP的最底层是负责数据传输的硬件。这种硬件相当于是以太网或电话线路等物理层的设备。
2.网络接口层(数据链路层)
网络接口层利用以太网中的数据链路层进行通信,因此属于接口层。也可以认为是网卡驱动。驱动程序是在操作系统和硬件之间起桥梁作用的软件。
3.互联网层(网络层)
互联网层使用IP协议,它相当于是OSI模型中的第3层网络层。TCP/IP分层中的互联网层和传输层的功能通常是由操作系统提供。连接互联网的所有主机和路由器必须都实现IP功能。
IP协议
IP是跨越网络传送数据包,使整个互联网都能收到数据的协议。IP也是分组交换的一种协议,但是它不具备重发机制,因此它是不可靠传输协议。
ICMP
IP数据包在传输的途中一旦发生异常导致无法到达目的地址时,需要给发送端发送一个异常通知。ICMP就是为了这个功能制定的。
ARP
从分组数据包的IP地址中解析出物理地址(MAC地址)的一种协议。
4.传输层
传输层最主要的功能是能够让应用程序之间实现通信。
TCP协议
TCP是一种面向连接的传输层协议。它可以保证两端通信主机之间的通信可达。TCP能够正确处理传输过程中丢包、传输顺序乱掉等异常情况。
UDP协议
UDP是一种面向无连接的传输层协议。UDP不关心对端是否真正收到了传送过去的数据。如果需要检查对端是否收到分组数据包,或者对端是否连接到网络,则需要在应用程序中实现。
UDP常用在分组数据较少或多播、广播通信以及视频通信等多媒体领域。
5.应用层(会话层以上的分层)
TCP/IP的分层中,将OSI参考模型中的会话层、表示层和应用层的功能都集中到了应用程序中实现。
TCP/IP应用的架构绝大多数属于客户端/服务器模型。
WWW
浏览器和服务端之间通信所用的协议是HTTP协议,所传输数据的主要格式为HTML。WWW中的HTTP属于OSI应用层的协议,HTML属于表示层的协议。
电子邮件
发送电子邮件时用到的协议是SMTP。最初,只能以文件格式发送电子邮件。然后现在的电子邮件的格式由MIME协议扩展之后,就可以发送声音、图像等各式各样的信息。MIME属于表示层的协议。
文件传输(FTP)
文件传输是指将其它计算机磁盘上的文件转移到本地计算机上,或将本地磁盘上的文件传送到其它计算机磁盘上。该文件传输过程使用的协议叫做FTP协议。
在FTP中进行文件传输时会建立两个TCP连接,分别是发送传输请求时所要用到的控制连接与实际传输数据时所要用到的数据连接。
远程登录(TELNET与SSH)
远程登录是指登录到远程的计算机上,使那台计算机上的程序得以运行的一种功能。远程登录常用TELNET与SSH两种协议。(当然还有其它一些协议)
网络管理(SNMP)
在TCP/IP中进行网络管理时,采用SNMP(Simple Network Management Protocol)协议。使用SNMP协议管理的主机、网桥、路由器等称作SNMP代理,而进行管理的那一端叫做管理器。SNMP就是这个管理器和代理要用到的协议。
在SNMP的代理端,保存着网络接口的信息、通信数据量、异常数据量以及设备温度等信息。这些信息可以通过MIB(Management Information Base)访问。因此,在TCP/IP的网络管理中,SNMP属于应用协议,MIB属于表示层协议。
二、TCP/IP四层模型
1 应用层:对应OSI中的应用层、表示层、会话层
2 物理链路层:对应OSI中的数据链路层、物理层(也有叫网络接口层)
3 数据包说明:
IP层传输单位是IP分组,属于点到点的传输;TCP层传输单位是TCP段,属于端到端的传输
三、TCP/IP协议、HTTP协议、Socket之间的关系
我们在传输数据时,只使用(传输层/网络层)TCP/IP协议,而没有应用层,便无法识别数据内容。如果想要使传输的数据有意义,则必须使用到应用层协议。
应用层协议有很多,比如HTTP、FTP、TELNET等,也可以自己定义应用层协议。WEB使用HTTP协议作应用层协议,以封装HTTP文本信息,然后使用TCP/IP做传输层协议将它发到网络上。
所以TCP/IP协议只是网络传输层的一种传输协议,而HTTP协议是web应用层的协议,使传输的数据更容易识别。
Socket(套接字):是对TCP/IP协议的封装,是通信链路的端点,Socket本身并不是协议,而是一个调用接口(API)。因为Socket的底层机制复杂,所以编程语言为我们提供了API方便我们使用Socket编程。Socket通信模型:进行网络通信时,Socket需要借助数据流来完成数据的传递工作。
通俗的描述: 把IP想像成一种高速公路,它允许其它协议在上面行驶。TCP是高速公路上的轿车,它们携带的货物就像HTTP协议。HTTP提供了显示数据的具体形式。Socket是发动机,提供了网络通信的能力。
四、TCP通信过程 - 三次握手 四次挥手
TCP通信过程包括三个步骤:建立TCP连接通道(三次握手)、数据传输、断开TCP连接通道(四次挥手)。
三次握手:
在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。
1)第一次握手:Client将标志位SYN置为1,随机产生一个值seq=J,并将该数据包发送给Server,Client进入SYN_SENT状态,等待Server确认。
2)第二次握手:Server收到数据包后由标志位SYN=1知道Client请求建立连接,Server将标志位SYN和ACK都置为1,ack=J+1,随机产生一个值seq=K,并将该数据包发送给Client以确认连接请求,Server进入SYN_RCVD状态。
3)第三次握手:Client收到确认后,检查ack是否为J+1,ACK是否为1,如果正确则将标志位ACK置为1,ack=K+1,并将该数据包发送给Server,Server检查ack是否为K+1,ACK是否为1,如果正确则连接建立成功,Client和Server进入ESTABLISHED状态,完成三次握手,随后Client与Server之间可以开始传输数据了。
A与B建立TCP连接时:首先A向B发SYN(同步请求),然后B回复SYN+ACK(同步请求应答),最后A回复ACK确认(应答确认),这样TCP的一次连接(三次握手)的过程就建立了!
四次挥手:
四次挥手指断开一个TCP连接时,需要客户端和服务端总共发送4个包以确认连接的断开。在socket编程中,这一过程由客户端或服务端任一方执行close来触发。
1)第一次挥手:Client发送一个FIN,用来关闭Client到Server的数据传送,Client进入FIN_WAIT_1状态。
2)第二次挥手:Server收到FIN后,发送一个ACK给Client,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),Server进入CLOSE_WAIT状态。
3)第三次挥手:Server发送一个FIN,用来关闭Server到Client的数据传送,Server进入LAST_ACK状态。
4)第四次挥手:Client收到FIN后,Client进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1,Server进入CLOSED状态,完成四次挥手。
为什么TCP释放连接需要四次?
TCP建立连接要进行三次握手,而断开连接要进行四次。这是由于TCP的半关闭造成的。因为TCP连接是全双工的(即数据可在两个方向上同时传递)所以进行关闭时每个方向上都要单独进行关闭。这个单方向的关闭就叫半关闭。当一方完成它的数据发送任务,就发送一个FIN来向另一方通告将要终止这个方向的连接。
五、利用Socket建立网络连接的步骤
建立Socket连接至少需要一对套接字,其中一个运行于客户端,称为ClientSocket ,另一个运行于服务器端,称为ServerSocket 。
套接字之间的连接过程分为三个步骤:服务器监听,客户端请求,连接确认。
1、服务器监听:服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态,等待客户端的连接请求。
2、客户端请求:指客户端的套接字提出连接请求,要连接的目标是服务器端的套接字。为此,客户端的套接字必须首先描述它要连接的服务器的套接字,指出服务器端套接字的地址和端口号,然后就向服务器端套接字提出连接请求。
3、连接确认:当服务器端套接字监听到或者说接收到客户端套接字的连接请求时,就响应客户端套接字的请求,建立一个新的线程,把服务器端套接字的描述发给客户端,一旦客户端确认了此描述,双方就正式建立连接。而服务器端套接字继续处于监听状态,继续接收其他客户端套接字的连接请求。
六、TCP与UDP的区别
TCP 面向连接的,传输安全可靠,速度慢
UDP 面向非连接的,传输不可靠,速度快
但并不是说UDP就无法实现安全可靠,程序员可以手动对UDP的数据收发进行验证,比如发送方对每个数据包进行编号,然后由接收方进行验证。UDP常用在广播通信、视频通信、文件下载方面