一、TCP/IP protocol
TCP/IP协议族 1.分为四层:应用层(FTP、DNS、HTTP)、传输层(TCP\UDP)、网络层、数据链路层(硬件)。
2.传输流程:(发送端从应用层往下走,接收端从链路层网上走)
例如客户端是发送端,服务器是接收端:客户端从上到下到链路层,找到服务器的链路层,再从下到上传到应用层。
发送端每通过一层增加上该层的首部信息,接收端每通过一层删除该层的首部信息。这种把信息包装起来的方法叫做封装。
3.TCP协议的作用:请求端把HTTP请求报文分割成有序号的数据包+服务端按序号组合接收到的数据包
4.IP协议的作用:通过路由器,一边中转一边送达数据包。
5.HTTP协议的作用:请求端生成请求报文+服务端分析处理TCP层按序号组合好的请求报文。
6.TCP著名的三次握手
众所周知,TCP协议提供可靠的字节流服务(把HTTP请求报文分割成数据包),那么为什么可靠呢?因为使用TCP协议发送完数据包后,发送端会与接收端进行三次握手: 第一次:发送端发送一个标有SYN的数据包 第二次握手:接收端接收到以后,回发一个标有SYN/ACK的数据包 第三次握手:发送端接收到,发送标有ACK的数据包。 ps:SYN和ACK都是TCP的标志。 如有哪个环节莫名中断,TCP协议会重复这个三次握手过程。
二、简单socket网络编程(Java实现)
服务端代码
import java.util.Scanner;
import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
public class server {
public static void main(String[] args) throws Exception{
ServerSocket serverSocket=new ServerSocket(8888);
System.out.println("Socket服务已启动,等待连接");
Socket socket=serverSocket.accept();
System.out.println("接收到客户端连接请求");
InputStream inputStream= socket.getInputStream();
InputStreamReader isr=new InputStreamReader(inputStream);
BufferedReader br=new BufferedReader(isr);
String info=null;
while((info=br.readLine())!=null){
System.out.println("收到客户端的请求:"+info);
}
socket.shutdownInput();
OutputStream os=socket.getOutputStream();
PrintWriter out=new PrintWriter(os);
out.write("这是server端");
out.flush();
out.close();
os.close();
br.close();
isr.close();
isr.close();
socket.close();
serverSocket.close();
}
}
客户端代码
import java.io.*;
import java.net.Socket;
public class client {
public static void main(String[] args)throws Exception {
Socket socket=new Socket("127.0.0.1",8888);
OutputStream outputStream=socket.getOutputStream();
PrintWriter out=new PrintWriter(outputStream);
out.write("admin,admin");
out.flush();
socket.shutdownOutput();
InputStream inputStream= socket.getInputStream();
InputStreamReader isr=new InputStreamReader(inputStream);
BufferedReader br=new BufferedReader(isr);
String info=null;
while((info=br.readLine())!=null){
System.out.println("收到服务端的响应:"+info);
}
br.close();
isr.close();
out.close();
out.close();
socket.close();
}
}
|