一、定义:TCP/IP(Transmission Control Protocol/Internet Protocol,传输控制协议/网际协议)是指能够在多个不同网络间实现信息传输的协议簇。TCP/IP协议不仅仅指的是TCP 和IP两个协议,而是指一个由FTP、SMTP、TCP、UDP、IP等协议构成的协议簇, 只是因为在TCP/IP协议中TCP协议和IP协议最具代表性,所以被称为TCP/IP协议。(来源百度百科)
二、TCP/IP协议由应用层、传输层、网络层和数据链路层组成。
1.应用层:应用层负责应用程序间的沟通,如超文本传输协议(HTTP)、简单的电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等,我们的网络编程主要就是针对应用层。
2.传输层:负责数据从发送端传输到接收端。传输层协议利用端口号识别本机中正在进行通信的应用程序,并准确地将数据传输。
端口号范围:
- 0~1023为知名端口号,它们的端口号都是固定的,一些知名端口号如下所示:
- 1024~65535为操作系统动态分配的端口号,客户端程序的端口号。
UDP协议的缺点:
- 无连接:知道对段的IP和端口号就直接进行传输,不需要建立连接;
- 不可靠:没有确认机制,没有重传机制;如果因为网络故障该段无法发到对方,UDP协议层也不会给应用层返回任何错误信息;
- 面向数据报:不能够灵活的控制读写数据的次数和数量
TCP的八大特性:
- 确认应答(ACK)机制: 在 TCP 中,当发送端的数据到达接收主机时,接收端主机会返回一个已收到消息的通知,并且每个ACK都有对应的确认序列号,意思是告诉发送者,我已经收到了哪些数据,下次你从哪里开始发。
- 超时重传:主机A发送数据给B后,可能因为网络拥堵等原因,数据无法到达主机B;如果主机A在一个特定的时间间隔没有收到B发来的确认应答,就会进行重发;
重发时间都是0.5秒的整数倍。数据被重发之后若还是收不到确认应答,则进行再次发送,此时,等待确认应答的时间将会以2倍、4倍的指数函数延长。 - 连接管理(3次握手四次挥手):在正常情况下,TCP要经过三次握手建立连接,四次挥手断开连接
三次握手如下图所示:
1)、建立连接时,客户端发送SYN包到服务器,并进入到SYN-SEND状态,等待服务器确认
2)、服务器收到SYN包,必须确认客户的SYN,同时自己也发送一个SYN包,即SYN+ACK包,此时服务器进入SYN-RECV状态
3)、客户端收到服务器的SYN+ACK包,向服务器发送确认报ACK,此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手,客户端与服务器开始传送数据。
四次挥手示意图:
1).第一次挥手:客户端发送一个FIN,用来关闭客户端到服务端的数据传送,客户端进入FIN_WAIT_1状态。
2).第二次挥手:服务端收到FIN后,发送一个ACK给客户端,客户端进入CLOSE_WAIT状态。
3).第三次挥手:服务端发送一个FIN,用来关闭服务端到客户端的数据传送,服务端进入LAST_ACK状态。
4).第四次挥手:客户端收到FIN后,客户端进入TIME_WAIT状态,接着发送一个ACK给服务端,服务端进入CLOSED状态,完成四次挥手。 - 滑动窗口:如果数据段一个一个发送导致效率比较低,尤其是数据往返时间长时,于是就出现了“滑动窗口”将多个字段一起发送,节省了等待时间。
如果在传输过程中部分ACK丢了可以通过后续ACK进行确认;
如果是数据包丢了,接收端会一直向发送端发送ACK(比如1001,表示0~1000已经收到了,该下一段数据了)提醒,当发送端连续收到3个这样的ACK时会重新发送这部分数据,当服务器端收到了想要的数据后,会直接跳到发送端最后一次发送的数据接着响应下次应答,这种机制被称为“快重传”。 - 流量控制:TCP根据接收端的处理能力来决定发送端的发送速度。
- 拥塞控制:如果在不清楚网络状态下开始就使用滑动窗口进行高效发送数据时,会引发不必要的问题,为此TCP引入“慢启动机制”,先发少量数据,摸清当前的网络拥塞状况后再决定以多大的速度进行数据传输。
- 延迟应答:如果发送数据量比较大,接收数据的主机立刻返回ACK应答,这时返回的窗口比较小,这种情况下接收端的处理能力远远没有达到极限,这时就需要接收端等一会儿再进行应答,延迟时间一般小于超时重传的时间,约为200ms。
- 捎带应答:在很多情况下客户端和服务器端是发一收一的,那么此时ACK就可以连同服务器回应的数据一块发送。
TCP一个问题:
处理粘包和半包问题:
问题描述:在传输过程中TCP是以字节流的形式发送数据的,这样会导致应用程序不知道从哪部分到哪部分开始处理数据。
解决方案:
a)给一个固定的边界 \n 使用readLine();方法读取数据
b)每次发送固定大小的数据(一般不会使用)
TCP异常机制:
a)不怎么致命的:结束进程、重启电脑、能发FIN请求和正常关闭没有区别;
b)掉电断网:TCP定时发送保活信息,如果对方不在线,直接关闭。
3.网络层:
规划路线,决定路由器的传输路径,如IP协议;
P地址分为两部分:网络号和主机号
网络号保证相互连接的两个网段有不同的标识;
在同一网段内,主机之间具有相同的网络号但必须有不同的主机号。
刚将IP地址分为6类如下图所示:
大多数组织都去申请了B类网络地址,导致B类地址分配完了,而浪费了A类地址,因此出现了新的划分方案,称为CIDR(Classless Interdomain Routing):IP+子网掩码,按位与得到网络号。
4.数据连路层: 负责接收IP数据报并通过网络发送之,或者从网络上接收物理帧,抽出IP数据报,交给IP层。