美文网首页
技能树-网络-TCP

技能树-网络-TCP

作者: 6faef730638b | 来源:发表于2018-03-18 00:43 被阅读12次

必备知识:

SYN :请求报文 是TCP/IP建立连接时使用的握手信号
ACK :确认字符
FIN :释放报文
seq: 序号
ack :等待接收的数据包的序列号


TCP协议

是一种面向连接的、可靠的、基于字节流的传输层通信协议

提供功能
1.可靠传输
-1.1滑动窗口
-1.2超时重传
-1.3选择确认
2.流量控制
-2.1滑动窗口
3.拥塞控制
-3.1慢开始
-3.2拥塞避免
-3.3快重传
-3.4快恢复

这里我们不对上面的内容进行详细的讲解 若是考研或者想深入研究的建议看谢希仁的计算机网络最新版

TCP连接

图解与文字解释

提问

1:建立tcp连接为什么需要三次握手?两次不行吗?

普通建立连接需要4步 互相发连接报文与确认报文 tcp连接将
服务端的响应和连接报文一起发放 只需三次即可

2:释放tcp连接 为什么是四次挥手 ?为什么不像连接一样需要三次

这是因为服务端在三次握手时候,把ACK和SYN放在一个报文里发送给客户端。
而关闭连接时,当收到对方的FIN报文时,仅仅表示对方不再发送数据了但是还能接收数据,己方也未必全部数据都发送给对方了,所以己方可以立即close,也可以发送一些数据给对方后,再发送FIN报文给对方来表示同意现在关闭连接,因此,己方ACK和FIN一般都会分开发送。

Socket

Socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个API,通过Socket,我们才能使用TCP/IP协议。

Socket套接字=IP+PORT

Socket连接就是所谓的长连接,理论上客户端和服务器端一旦建立起连接将不会主动断掉,但是由于各种环境因素可能会是连接断开
当一个Socket连接中没有数据的传输,那么为了维持连接需要发送心跳消息~~具体心跳消息格式是开发者自己定义的,若没有及时接受到心跳返回,重新建立连接

通信模型

服务端

1.创建serversocket 并循环accept()等待接受请求
2.接受到连接后创建相应服务的socket连接
3.数据流式传输交互
4.socket.close()

public class SocketServer {  
    //监听端口号  
    private static final int SERVER_PORT = 12345;  
    public static void main(String[] args) {  
        try {  
            System.out.println("Server: Connecting...");  
            ServerSocket serverSocket = new ServerSocket(SERVER_PORT);  
            while (true) {  
                //循环监听客户端请求  
                Socket clientSocket = serverSocket.accept();  
                System.out.println("Server: Receiving...");  
                try {  
                    //获取输入流  
                    BufferedReader in = new BufferedReader(  
                            new InputStreamReader(clientSocket.getInputStream()));  
                    //获取从客户端发来的信息  
                    String str = in.readLine();  
                    System.out.println("Server: Received: '" + str + "'");  
                } catch (Exception e) {  
                    System.out.println("Server: Error");  
                    e.printStackTrace();  
                } finally {  
                    clientSocket.close();  
                    System.out.println("Server: Close.");  
                }  
            }  
  
        } catch (Exception e) {  
            System.out.println("Server: Error");  
            e.printStackTrace();  
        }  
    }  
}  

客户端

1.创建连接socket 向serversocket发出请求
2.数据流式传输交互
3.socket.close()

Socket socket = new Socket("192.168.1.104", 12345);  
//发送给服务端的消息  
String message = "Message from Android phone"; 
 //第二个参数为True则为自动flush  
PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(  
socket.getOutputStream())), true);  

相关文章

  • 技能树-网络-TCP

    必备知识: SYN :请求报文 是TCP/IP建立连接时使用的握手信号ACK :确认字符FIN :释放报文seq:...

  • Android技能树 — 网络小结(2)之TCP/UDP

    介于自己的网络方面知识烂的一塌糊涂,所以准备写相关网络的文章,但是考虑全部写在一篇太长了,所以分开写,希望大家能仔...

  • 技能树-网络-HTTP

    必备知识:URL:统一资源定位符 对网络中资源的定位地址URI:是统一资源标识符 对网络资源的标识SSL:安全套接...

  • 程序员职业素养

    一、技能素质 1.1 软技能 数据结构和算法 设计模式 网络TCP/IP 代码整洁之道 重构改善既有代码 代码大全...

  • 程序员职业素养

    一、技能素质1.1 软技能 数据结构和算法设计模式网络TCP/IP代码整洁之道重构改善既有代码代码大全敏捷软件开发...

  • 计算机网络知识整理

    TCP/IP 网络模型 TCP/IP 网络模型 应用层,传输层,网络层,链路层 TCP、UDP TCP报文段 源端...

  • 《图解TCP/IP : 第5版》.PDF

    简介 这是一本图文并茂的网络管理技术书籍,旨在让广大读者理解TCP/IP的基本知识、掌握TCP/IP的基本技能。 ...

  • 图解TCPIP(第5版)

    这是一本图文并茂的网络管理技术书籍,旨在让广大读者理解TCP/IP的基本知识,掌握TCP/IP的基本技能。 书中讲...

  • Linux环境下排除网络故障常用命令

    1. 网络模型回顾 先来回顾一下OSI和TCP/IP网络模型,TCP/IP网络模型更符合现实中的网络。TCP/IP...

  • Python 高级 4

    网络传输方式-TCP、TCP客户端、TCP服务器、文件下载器、TCP的三次握手、TCP的4次挥手 1.网络传输方式...

网友评论

      本文标题:技能树-网络-TCP

      本文链接:https://www.haomeiwen.com/subject/hwrrqftx.html