国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

CS144 計(jì)算機(jī)網(wǎng)絡(luò) Lab4:TCP Connection

這篇具有很好參考價(jià)值的文章主要介紹了CS144 計(jì)算機(jī)網(wǎng)絡(luò) Lab4:TCP Connection。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

前言

經(jīng)過(guò)前面幾個(gè)實(shí)驗(yàn)的鋪墊,終于到了將他們組合起來(lái)的時(shí)候了。Lab4 將實(shí)現(xiàn) TCP Connection 功能,內(nèi)部含有 TCPReceiverTCPSender,可以與 TCP 連接的另一個(gè)端點(diǎn)進(jìn)行數(shù)據(jù)交換。

CS144 計(jì)算機(jī)網(wǎng)絡(luò) Lab4:TCP Connection

CS144 計(jì)算機(jī)網(wǎng)絡(luò) Lab4:TCP Connection

實(shí)驗(yàn)要求

簡(jiǎn)單來(lái)說(shuō),這次實(shí)驗(yàn)就是要在 TCPConnection 類(lèi)中實(shí)現(xiàn)下圖所示的有限狀態(tài)機(jī):

CS144 計(jì)算機(jī)網(wǎng)絡(luò) Lab4:TCP Connection

這些狀態(tài)對(duì)應(yīng) TCPState 的內(nèi)部枚舉類(lèi) State

//! \brief Official state names from the [TCP](\ref rfc::rfc793) specification
enum class State {
    LISTEN = 0,   //!< Listening for a peer to connect
    SYN_RCVD,     //!< Got the peer's SYN
    SYN_SENT,     //!< Sent a SYN to initiate a connection
    ESTABLISHED,  //!< Three-way handshake complete
    CLOSE_WAIT,   //!< Remote side has sent a FIN, connection is half-open
    LAST_ACK,     //!< Local side sent a FIN from CLOSE_WAIT, waiting for ACK
    FIN_WAIT_1,   //!< Sent a FIN to the remote side, not yet ACK'd
    FIN_WAIT_2,   //!< Received an ACK for previously-sent FIN
    CLOSING,      //!< Received a FIN just after we sent one
    TIME_WAIT,    //!< Both sides have sent FIN and ACK'd, waiting for 2 MSL
    CLOSED,       //!< A connection that has terminated normally
    RESET,        //!< A connection that terminated abnormally
};

除了三次握手和四次揮手外,我們還得處理報(bào)文段首部 RST 標(biāo)志被置位的情況,這時(shí)候應(yīng)該將斷開(kāi)連接,并將內(nèi)部的輸入流和輸入流標(biāo)記為 error,此時(shí)的 TCPState 應(yīng)該是 RESET

代碼實(shí)現(xiàn)

先在類(lèi)聲明里面加上一些成員:

class TCPConnection {
  private:
    TCPConfig _cfg;
    TCPReceiver _receiver{_cfg.recv_capacity};
    TCPSender _sender{_cfg.send_capacity, _cfg.rt_timeout, _cfg.fixed_isn};

    //! outbound queue of segments that the TCPConnection wants sent
    std::queue<TCPSegment> _segments_out{};

    //! Should the TCPConnection stay active (and keep ACKing)
    //! for 10 * _cfg.rt_timeout milliseconds after both streams have ended,
    //! in case the remote TCPConnection doesn't know we've received its whole stream?
    bool _linger_after_streams_finish{true};

    bool _is_active{true};

    size_t _last_segment_time{0};

    /**
     * @brief 發(fā)送報(bào)文段
     * @param fill_window 是否填滿(mǎn)發(fā)送窗口
    */
    void send_segments(bool fill_window = false);

    // 發(fā)送 RST 報(bào)文段
    void send_rst_segment();

    // 中止連接
    void abort();

  public:
    // 省略其余成員
}

接著實(shí)現(xiàn)幾個(gè)最簡(jiǎn)單的成員函數(shù):

size_t TCPConnection::remaining_outbound_capacity() const { return _sender.stream_in().remaining_capacity(); }

size_t TCPConnection::bytes_in_flight() const { return _sender.bytes_in_flight(); }

size_t TCPConnection::unassembled_bytes() const { return _receiver.unassembled_bytes(); }

size_t TCPConnection::time_since_last_segment_received() const { return _last_segment_time; }

bool TCPConnection::active() const { return _is_active; }

主動(dòng)連接

客戶(hù)端可以調(diào)用 TCPConnection::connect 函數(shù)發(fā)送 SYN 報(bào)文段請(qǐng)求與服務(wù)端建立連接,由于 Lab3 中實(shí)現(xiàn)的 TCPSender::fill_window() 函數(shù)會(huì)根據(jù)發(fā)送方的狀態(tài)選擇要發(fā)送的報(bào)文段類(lèi)型,在還沒(méi)建立連接的情況下,這里直接調(diào)用 fill_window() 就會(huì)將一個(gè) SYN 報(bào)文段放在隊(duì)列中,我們只需將其取出放到 TCPConnection_segments_out 隊(duì)列中即可:

void TCPConnection::connect() {
    // 發(fā)送 SYN
    send_segments(true);
}

void TCPConnection::send_segments(bool fill_window) {
    if (fill_window)
        _sender.fill_window();

    auto &segments = _sender.segments_out();


    while (!segments.empty()) {
        auto seg = segments.front();

        // 設(shè)置 ACK、確認(rèn)應(yīng)答號(hào)和接收窗口大小
        if (_receiver.ackno()) {
            seg.header().ackno = _receiver.ackno().value();
            seg.header().win = _receiver.window_size();
            seg.header().ack = true;
        }

        _segments_out.push(seg);
        segments.pop();
    }
}

主動(dòng)關(guān)閉

當(dāng)上層程序沒(méi)有更多數(shù)據(jù)需要發(fā)送時(shí),將會(huì)調(diào)用 TCPConnection::end_input_stream() 結(jié)束輸入,這時(shí)候需要發(fā)送 FIN 報(bào)文段給服務(wù)端,告訴他自己沒(méi)有更多數(shù)據(jù)要發(fā)送了,但是可以繼續(xù)接收服務(wù)端發(fā)來(lái)的數(shù)據(jù)??蛻?hù)端的狀態(tài)由 ESTABLISHED 轉(zhuǎn)移到 FIN_WAIT_1,服務(wù)端收到 FIN 之后變成 CLOSE_WAIT 狀態(tài),并回復(fù) ACK 給客戶(hù)端,客戶(hù)端收到之后接著轉(zhuǎn)移到 FIN_WAIT_2 狀態(tài)。

如果服務(wù)端數(shù)據(jù)傳輸完成了,會(huì)發(fā)送 FIN 報(bào)文段給客戶(hù)端,轉(zhuǎn)移到 LAST_ACK 狀態(tài),此時(shí)客戶(hù)端會(huì)回復(fù)最后一個(gè) ACK 給服務(wù)端并進(jìn)入 TIME_WAIT 超時(shí)等待狀態(tài),如果這個(gè)等待時(shí)間內(nèi)沒(méi)有收到服務(wù)端重傳的 FIN,就說(shuō)明 ACK 順利到達(dá)了服務(wù)端且服務(wù)端已經(jīng)變成 CLOSED 狀態(tài)了,此時(shí)客戶(hù)端也能斷開(kāi)連接變成 CLOSED 了。

void TCPConnection::end_input_stream() {
    // 發(fā)送 FIN
    _sender.stream_in().end_input();
    send_segments(true);
}

在上述情景中,客戶(hù)端是主動(dòng)關(guān)閉(Active Close)的一方,服務(wù)端是被動(dòng)關(guān)閉(Passive Close)的一方。

CS144 計(jì)算機(jī)網(wǎng)絡(luò) Lab4:TCP Connection

主動(dòng)重置連接

有兩種情況會(huì)導(dǎo)致發(fā)送 RST 報(bào)文段來(lái)主動(dòng)重置連接:

  • 當(dāng) TCPSender 超時(shí)重傳的次數(shù)過(guò)多時(shí),表明通信鏈路存在故障;
  • TCPConnect 對(duì)象被釋放但是 TCP 仍然處于連接狀態(tài)的時(shí)候;

和 Lab3 中類(lèi)似,TCPConnection 通過(guò)外部定期調(diào)用 tick() 函數(shù)來(lái)得知過(guò)了多長(zhǎng)時(shí)間,在 tick() 函數(shù)里還得處理超時(shí)等待的情況:

//! \param[in] ms_since_last_tick number of milliseconds since the last call to this method
void TCPConnection::tick(const size_t ms_since_last_tick) {
    _sender.tick(ms_since_last_tick);

    // 重傳次數(shù)太多時(shí)需要斷開(kāi)連接
    if (_sender.consecutive_retransmissions() > _cfg.MAX_RETX_ATTEMPTS) {
        return send_rst_segment();
    }

    // 重傳數(shù)據(jù)包
    send_segments();

    _last_segment_time += ms_since_last_tick;

    //  TIME_WAIT 超時(shí)等待狀態(tài)轉(zhuǎn)移到 CLOSED 狀態(tài)
    if (TCPState::state_summary(_receiver) == TCPReceiverStateSummary::FIN_RECV &&
        TCPState::state_summary(_sender) == TCPSenderStateSummary::FIN_ACKED &&
        _last_segment_time >= 10 * _cfg.rt_timeout) {
        _linger_after_streams_finish = false;
        _is_active = false;
    }
}

TCPConnection::~TCPConnection() {
    try {
        if (active()) {
            cerr << "Warning: Unclean shutdown of TCPConnection\n";

            // Your code here: need to send a RST segment to the peer
            send_rst_segment();
        }
    } catch (const exception &e) {
        std::cerr << "Exception destructing TCP FSM: " << e.what() << std::endl;
    }
}

void TCPConnection::send_rst_segment() {
    abort();
    TCPSegment seg;
    seg.header().rst = true;
    _segments_out.push(seg);
}

void TCPConnection::abort() {
    _is_active = false;
    _sender.stream_in().set_error();
    _receiver.stream_out().set_error();
}

接收?qǐng)?bào)文段

外部通過(guò) TCPConnection::segment_received() 將接收到的報(bào)文段傳給它,在這個(gè)函數(shù)內(nèi)部,需要將確認(rèn)應(yīng)答號(hào)和接收窗口大小告訴 TCPSender,好讓他接著填滿(mǎn)發(fā)送窗口。接著還需要把報(bào)文段傳給 TCPReceiver 來(lái)重組數(shù)據(jù),并更新確認(rèn)應(yīng)答號(hào)和自己的接收窗口大小。然后 TCPSender 需要根據(jù)收到的包類(lèi)型進(jìn)行狀態(tài)轉(zhuǎn)移,并決定發(fā)送含有有效數(shù)據(jù)的報(bào)文段還是空 ACK 給對(duì)方。

為什么即使沒(méi)有新的數(shù)據(jù)要發(fā)送也要回復(fù)一個(gè)空 ACK 呢?因?yàn)槿绻贿@么做,對(duì)方會(huì)以為剛剛發(fā)的包丟掉了而一直重傳。

void TCPConnection::segment_received(const TCPSegment &seg) {
    if (!active())
        return;

    _last_segment_time = 0;

    // 是否需要發(fā)送空包回復(fù) ACK,比如沒(méi)有數(shù)據(jù)的時(shí)候收到 SYN/ACK 也要回一個(gè) ACK
    bool need_empty_ack = seg.length_in_sequence_space();

    auto &header = seg.header();

    // 處理 RST 標(biāo)志位
    if (header.rst)
        return abort();

    // 將包交給發(fā)送者
    if (header.ack) {
        need_empty_ack |= !_sender.ack_received(header.ackno, header.win);

        // 隊(duì)列中已經(jīng)有數(shù)據(jù)報(bào)文段了就不需要專(zhuān)門(mén)的空包回復(fù) ACK
        if (!_sender.segments_out().empty())
            need_empty_ack = false;
    }

    // 將包交給接受者
    need_empty_ack |= !_receiver.segment_received(seg);

    // 被動(dòng)連接
    if (TCPState::state_summary(_receiver) == TCPReceiverStateSummary::SYN_RECV &&
        TCPState::state_summary(_sender) == TCPSenderStateSummary::CLOSED)
        return connect();

    // 被動(dòng)關(guān)閉
    if (TCPState::state_summary(_receiver) == TCPReceiverStateSummary::FIN_RECV &&
        TCPState::state_summary(_sender) == TCPSenderStateSummary::SYN_ACKED)
        _linger_after_streams_finish = false;

    // LAST_ACK 狀態(tài)轉(zhuǎn)移到 CLOSED
    if (TCPState::state_summary(_receiver) == TCPReceiverStateSummary::FIN_RECV &&
        TCPState::state_summary(_sender) == TCPSenderStateSummary::FIN_ACKED && !_linger_after_streams_finish) {
        _is_active = false;
        return;
    }

    if (need_empty_ack && TCPState::state_summary(_receiver) != TCPReceiverStateSummary::LISTEN)
        _sender.send_empty_segment();

    // 發(fā)送其余報(bào)文段
    send_segments();
}

測(cè)試

在終端中輸入 make check_lab4 就能運(yùn)行所有測(cè)試用例,測(cè)試結(jié)果如下:

CS144 計(jì)算機(jī)網(wǎng)絡(luò) Lab4:TCP Connection

發(fā)現(xiàn)有幾個(gè) txrx.sh 的測(cè)試用例失敗了,但是單獨(dú)運(yùn)行這些測(cè)試用例卻又可以通過(guò),就很奇怪:

CS144 計(jì)算機(jī)網(wǎng)絡(luò) Lab4:TCP Connection

接著測(cè)試一下吞吐量(請(qǐng)確保構(gòu)建類(lèi)型是 Release 而不是 Debug),感覺(jué)還行, 0.71Gbit/s,超過(guò)了實(shí)驗(yàn)指導(dǎo)書(shū)要求的 0.1Gbit/s。但是實(shí)際上還可以?xún)?yōu)化一下 ByteStream 類(lèi),將內(nèi)部數(shù)據(jù)類(lèi)型換成 BufferList,這樣在寫(xiě)入數(shù)據(jù)的時(shí)候就不用一個(gè)字符一個(gè)字符插入隊(duì)列了,可以大大提高效率。

CS144 計(jì)算機(jī)網(wǎng)絡(luò) Lab4:TCP Connection

最后將 Lab0 中 webget 使用的 TCPSocket 換成 CS144TCPSocket,重新編譯并運(yùn)行 webegt,發(fā)現(xiàn)能夠正確得到響應(yīng)結(jié)果,說(shuō)明我們實(shí)現(xiàn)的這個(gè) CS144TCPSocket 已經(jīng)能和別的操作系統(tǒng)實(shí)現(xiàn)的 Socket 進(jìn)行交流了:

CS144 計(jì)算機(jī)網(wǎng)絡(luò) Lab4:TCP Connection

后記

至此,CS144 的 TCP 實(shí)驗(yàn)部分已全部完成,可以說(shuō)是比較有挑戰(zhàn)性的一次實(shí)驗(yàn)了,尤其是 Lab4 部分,各種奇奇怪怪的 bug,編碼一晚上,調(diào)試時(shí)長(zhǎng)兩天半(約等于一坤天),調(diào)試的時(shí)候斷點(diǎn)還總是失效,最后發(fā)現(xiàn)是優(yōu)化搞的鬼,需要將 etc/cflags.cmake 第 18 行改為 set (CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -ggdb3 -O0") 才行。以上~~文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-435157.html

到了這里,關(guān)于CS144 計(jì)算機(jī)網(wǎng)絡(luò) Lab4:TCP Connection的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀(guān)點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 《計(jì)算機(jī)網(wǎng)絡(luò)自頂向下》Wireshark實(shí)驗(yàn) Lab4 TCP

    《計(jì)算機(jī)網(wǎng)絡(luò)自頂向下》Wireshark實(shí)驗(yàn) Lab4 TCP

    《計(jì)算機(jī)網(wǎng)絡(luò)自頂向下》Wireshark Lab + 套接字編程作業(yè) + 雜項(xiàng)實(shí)驗(yàn)室編程作業(yè) 全實(shí)驗(yàn)博客鏈接 各位好 啊 學(xué)計(jì)算機(jī)想要學(xué)好真的還是挺難的 說(shuō)實(shí)話(huà) 科班學(xué)計(jì)算機(jī)如果想要花大量的時(shí)間去學(xué) 只能把平時(shí)的課程大部分時(shí)間不去上 如果班級(jí)管理嚴(yán)格或者說(shuō) 各種因素讓你不得不去上

    2023年04月09日
    瀏覽(40)
  • Wireshark TCP實(shí)驗(yàn)—Wireshark Lab: TCP v7.0(計(jì)算機(jī)網(wǎng)絡(luò)自頂向下第七版)

    Wireshark TCP實(shí)驗(yàn)—Wireshark Lab: TCP v7.0(計(jì)算機(jī)網(wǎng)絡(luò)自頂向下第七版)

    What is the IP address and TCP port number used by the client computer (source) that is transferring the file to gaia.cs.umass.edu? 根據(jù)數(shù)據(jù)包中的 tcp-ethereal-trace-1 ,其源 IP 地址為 192.168.1.102 192.168.1.102 192.168.1.102 ,端口號(hào)為 1162 1162 1162 。 What is the IP address of gaia.cs.umass.edu? On what port number is it sending and re

    2023年04月09日
    瀏覽(27)
  • CS 144 Lab Four -- the TCP connection

    CS 144 Lab Four -- the TCP connection

    對(duì)應(yīng)課程視頻: 【計(jì)算機(jī)網(wǎng)絡(luò)】 斯坦福大學(xué)CS144課程 Lab Four 對(duì)應(yīng)的PDF: Lab Checkpoint 4: down the stack (the network interface) TCPConnection 需要將 TCPSender 和 TCPReceiver 結(jié)合,實(shí)現(xiàn)成一個(gè) TCP 終端,同時(shí)收發(fā)數(shù)據(jù)。 TCPConnection 有幾個(gè)規(guī)則需要遵守: 對(duì)于 接收數(shù)據(jù)段 而言: 如果接收到的數(shù)據(jù)包

    2024年02月13日
    瀏覽(19)
  • CS 144 Lab Four 收尾 -- 網(wǎng)絡(luò)交互全流程解析

    CS 144 Lab Four 收尾 -- 網(wǎng)絡(luò)交互全流程解析

    對(duì)應(yīng)課程視頻: 【計(jì)算機(jī)網(wǎng)絡(luò)】 斯坦福大學(xué)CS144課程 本節(jié)作為L(zhǎng)ab Four的收尾,主要帶領(lǐng)各位來(lái)看看網(wǎng)絡(luò)交互的整體流程是怎樣的。 這里以tcp_ipv4.cc文件為起點(diǎn),來(lái)探究一下cs144是如何實(shí)現(xiàn)整個(gè)協(xié)議棧的。 首先,項(xiàng)目根路徑中的 tun.sh 會(huì)使用 ip tuntap 技術(shù)創(chuàng)建虛擬 Tun/Tap 網(wǎng)絡(luò)設(shè)備

    2024年02月04日
    瀏覽(18)
  • 北京大學(xué)計(jì)算機(jī)網(wǎng)絡(luò)lab1——MyFTP

    北京大學(xué)計(jì)算機(jī)網(wǎng)絡(luò)lab1——MyFTP

    目錄 Lab目標(biāo) 一、知識(shí)補(bǔ)充 二、具體實(shí)現(xiàn) 1.數(shù)據(jù)報(bào)文格式和字符串處理 2.open函數(shù) 3.auth 4.ls 5.get和put 三、總結(jié) ps:本人靠著計(jì)網(wǎng)lab幾乎就足夠在就業(yè)行情并不好的23年找到自己滿(mǎn)意的工作了,計(jì)網(wǎng)lab的教程也非常給力,對(duì)我這種恐懼寫(xiě)lab的菜狗都非常友好(本人寫(xiě)lab3確實(shí)比較

    2024年02月07日
    瀏覽(35)
  • Wireshark IP實(shí)驗(yàn)—Wireshark Lab: IP v7.0(計(jì)算機(jī)網(wǎng)絡(luò)自頂向下第七版)

    Wireshark IP實(shí)驗(yàn)—Wireshark Lab: IP v7.0(計(jì)算機(jī)網(wǎng)絡(luò)自頂向下第七版)

    修改發(fā)送數(shù)據(jù)包的大小 跟蹤的地址為 www.ustc.edu.cn text{www.ustc.edu.cn} www.ustc.edu.cn 由于自己抓的包比較凌亂,分析起來(lái)比較復(fù)雜,所以使用作者的數(shù)據(jù)包進(jìn)行分析 Select the first ICMP Echo Request message sent by your computer, and expand the Internet Protocol part of the packet in the packet details window.Wh

    2024年02月04日
    瀏覽(18)
  • Wireshark HTTP實(shí)驗(yàn)—Wireshark Lab: HTTP v7.0(計(jì)算機(jī)網(wǎng)絡(luò)自頂向下第七版)

    Wireshark HTTP實(shí)驗(yàn)—Wireshark Lab: HTTP v7.0(計(jì)算機(jī)網(wǎng)絡(luò)自頂向下第七版)

    Is your browser running HTTP version 1.0 or 1.1? What version of HTTP is the server running? 瀏覽器與服務(wù)器的版本均為 H T T P / 1.1 HTTP/1.1 H TTP /1.1 。 What languages (if any) does your browser indicate that it can accept to the server? 能接受簡(jiǎn)體中文以及英文。 What is the IP address of your computer? Of the gaia.cs.umass.edu serv

    2024年02月08日
    瀏覽(19)
  • 計(jì)算機(jī)網(wǎng)絡(luò)—TCP

    計(jì)算機(jī)網(wǎng)絡(luò)—TCP

    源端口號(hào)和目標(biāo)端口號(hào):16位字段,用于標(biāo)識(shí)TCP連接的源和目標(biāo)端口號(hào)。 序列號(hào)(Sequence Number):32位字段,用于標(biāo)識(shí)發(fā)送的數(shù)據(jù)字節(jié)流中的第一個(gè)字節(jié)的序號(hào)。 確認(rèn)號(hào)(Acknowledgment Number):32位字段,確認(rèn)收到的字節(jié)序號(hào),即期望接收的下一個(gè)字節(jié)的序號(hào)。 數(shù)據(jù)偏移:4位字

    2024年02月13日
    瀏覽(35)
  • 【計(jì)算機(jī)網(wǎng)絡(luò)】TCP協(xié)議

    【計(jì)算機(jī)網(wǎng)絡(luò)】TCP協(xié)議

    實(shí)驗(yàn)?zāi)康?應(yīng)用所學(xué)知識(shí): 1. 熟悉 TCP 的協(xié)議格式。 2. 理解 TCP 對(duì)序列號(hào)和確認(rèn)號(hào)的使用。 3. 理解 TCP 的流量控制算法和擁塞控制算法。 實(shí)驗(yàn)步驟與結(jié)果 1.任務(wù)一: 將Alice.txt上傳到服務(wù)器: 使用wireshark捕獲數(shù)據(jù)包,看到計(jì)算機(jī)和gaia.cs.umass.edu之間的一系列 TCP 和 HTTP 通信,包

    2023年04月20日
    瀏覽(22)
  • 計(jì)算機(jī)網(wǎng)絡(luò)-TCP協(xié)議

    計(jì)算機(jī)網(wǎng)絡(luò)-TCP協(xié)議

    TCP被稱(chēng)為面向連接的,因?yàn)樵趹?yīng)用程序開(kāi)始互傳數(shù)據(jù)之前,TCP會(huì)先建立一個(gè)連接,該連接的建立涉及到 三次“握手 ”。 TCP的連接不是一條真實(shí)存在的電路,而是一條邏輯鏈接 ,其共同狀態(tài)僅保留在兩個(gè)通信端系統(tǒng)的TCP程序中。 TCP連接也是點(diǎn)對(duì)點(diǎn)的,即TCP連接只能存在于一

    2024年02月08日
    瀏覽(37)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包