2023. 4. 12. 22:40ใComputerScience/FullStackProgramming
Transmission Control Protocol
- TCP is a connection-oriented protocol
- it creates a virtual connection between two TCPs to send data.
- In addition, TCP uses flow and error control mechanisms at the transport level.
- ์๋ฌ ๊ฒ์ถ, ๋ณต๊ตฌ ๋ฐ ํ๋ฆ ์ ์ด(Layer 4)์ ์ถฉ์คํ ํต์ ํ๋กํ ์ฝ TCP
- ํด๋ผ์ด์ธํธ - ์๋ฒ ๊ฐ ์ฐ๊ฒฐ ์์ฒญ, ์๋ต, ์ต์ข ๊ฒฐ์
- ์๋ฌ ๊ฒ์ถ, ํ๋ฆ ๊ด๋ จ ๋ฉ์ปค๋์ฆ์ด ์๋ค.
- ์ผ๋ฐ์ ์ธ ๋์์ ์คํธ๋ฆฌ๋ฐ
TCP(์๋ฌ ๊ฒ์ถ ๋ฐ ๋ณต๊ตฌ) or UDP(๋นจ๋ฆฌ ๋นจ๋ฆฌ)
๋ ์ค ํ๋๋ฅผ ์ฐ๋ ์๊ด ์๋ค.
-> TCP๋ฅผ ์ - ๋ฒํผ๋ง - ์ค๋ฅ๊ฐ ์๋๋ผ, ๋ฒํผ์ ์๋ ๊ฒ
์๋ฌ๊ฐ ๋๋ฉด? ์๋ฌ ๊ฒ์ถ ๋ฐ ๋ณต๊ตฌ๋ฅผ ํด์ ๊ฐ์ ธ์ด
๊ณ์ ๋ณต๊ตฌ ํ๋ฉด์ ๋ค์๋ค ์์ ๋๊ณ , 15์ด ๋ค์ ๋ฟ๋ฆฌ๋ ๊ฒ - ์๋ณธ base์ ์์ - ์ค์๊ฐ์ด๋ผ๊ณ ์ฐฉ๊ฐํ๋๋ฐ, ์ด๋ฏธ ๋ง๋ค์ด์ง ์์์
๋ นํ๋ ์ํ - TCP ๋ฒ ์ด์ค
์ค, ์คํธ๋ฆฌ๋ฐ ๋ฐฉ์ก - live
์ง์ฐ์ด ์ค์ด์ผ ํ๋ค๋ฉด, UDP๋ฅผ ์์ - ์์ฑ - ํ์ฉ๋๋ ์ง์ฐ ์๊ฐ 100, 150ms delay๋ ์ธ๊ฐ์๊ฒ ๊ฐ์ง๋์ง ์์
๋ด๊ฐ ์ง๊ธ ์ ๊ณตํ๋ ์ปจํ ์ธ ๊ฐ ์ด๋ค ํน์ฑ์ ๋ฐ์ํ๋๋์ ๋ฐ๋ผ ์ ์ ํ ํต์ ๊ธฐ์ ์ ์จ์ผํ๋ค.
Stream Delivery Service
- TCP is a stream-oriented protocol
- TCP creates an environment in which the two processes seem to be connected by an imaginary “tube” that carries their data across the Internet.
- TCP ๋ IPC ! ์๋ก ๋ค๋ฅธ ํ๋ก์ธ์ค ๊ฐ ํต์ , ์ฐ๊ฒฐ์ ์๋ฏธํ๋ค.
- ๋ฐ์ดํธ๊ฐ ์ค์ค ๋ค์ด๊ฐ๋ค - stream
์ ๋์ค - ํต์ ๊ตํ๊ธฐ / ์ด๋ฅผ ์ํ cpp
๊ธฐ๋ณธ ์ฒ ํ - logicalํ ๋ฌผ์ค๊ธฐ๋ฅผ ๋ง๋ค๊ณ ,
์ก์ ๋จ์์ ์์ ๋จ์ผ๋ก ๋ฐ์ดํธ ๋ฉ์ด๋ฆฌ๋ฅผ ์ค์ค์ด ๋ณด๋ธ๋ค.
Sending and Receiving Buffers
- Because the sending and receiving processes may not produce and consume data at the same speed, TCP needs buffers for storage.
- One way to implement is to use a circular array
- ์ก์ ๋จ์ ๋ฒํผ
- ์๋๋ฐฉ์ด ๋ชป ๋ฐ์๋ค๋ฉด ๋ค์ ๋ณด๋ด์ผ ํ๋ค.
๋ฐ๋ผ์ ๋ณด๋ธ ๊ฒ์ ๋ณต์ฌ๋ณธ์ ๊ฐ๊ณ ์์ด์ผ ํจ - sent
์์ง ์ ๋ฐ์๋ค๋ ์ด์ผ๊ธฐ๋ฅผ ๋ชป ๋ฐ์
์ฌ์ ์ก์ ์ํด ์ ์ฅํด ๋ - not sent
์๋๋ฐฉ์ด ๋ชป ๋ฐ์๊ฑฐ ๊ฐ์์ ์์๋๊ณ , ์์ง ๋ณด๋ด์ง ๋ชป ํจ
์๋ก์ด ์ ๋ณด๋ค์ด ์์ฌ๊ฐ๋ ๊ณณ
- ์์ ๋จ์ ๋ฒํผ
๋๋ ์ต์ ์ ๋คํด ๋ฒํผ์ ์ฌ๋ฆฌ๊ณ ,
์ดํ๋ฆฌ์ผ์ด์ ์ฌ์ ๊ฐ ๋ ๋, ๋ฒํผ์์ ์์์ ๊ฐ์ ธ๊ฐ๋ ๊ฒ - ๋ฐ์์ ์ ์ฅํ๋๋ฐ ์์ง ์ดํ์ด ์ ๊ฐ์ ธ๊ฐ ์ ๋ณด
- ์๋ก์ด ์ ๋ณด ์ฐ์ผ ๊ณณ
-> ์๋๋ฐฉ TCP์ ๊ฐ์ฉ ๊ณต๊ฐ์ ์ฑ์ฐ๋ ๊ฒ
TCP์ ์์ ๋ฒํผ ์ฌ์ด์ฆ๋งํผ ์ก์ ๋จ์์ ๋ณด๋ด๋ ๊ฒ - ๋ฐ๋ผ์ ์์ ๋จ์ ๊ฐ์ฉ ๊ณต๊ฐ ์ฌ์ด์ฆ๋ฅผ ์ก์ ๋จ์ผ๋ก ๋์์์ด ์๋ฆผ
์์ ๋ฒํผ ํด์๋ก ํต์ ๋์ด๋จ
๋ฒํผ ์ฌ์ด์ฆ - ๊ทธ๋ฆฌ ํฌ์ง ์์ (4/50๋ ๋์ ์ฐ์ด๊ณ ์๋ค.)
tcp ์ํํธ์จ์ด - ๋ฒํผ์ฌ์ด์ฆ ํ๊ณ๋ก ๋ง์ด ๋ณด๋ผ ์ ์๋ค (์ฑ๋ฅ ์ ํ)
Segments
- At the transport layer, TCP groups a number of bytes together into a packet called a segment.
- TCP adds a header to each segment (for control purposes) and delivers the segment to the IP layer for transmission.
- The segments are encapsulated in IP datagrams and transmitted.
- This entire operation is transparent to the receiving process.
- Segments received out of order, lost, or corrupted may be resent.
- ์ ๋ tcp๋ง segment ๋ ํนํ ๋จ์ด๋ฅผ ์
- ์ฃผ๊ณ ๋ฐ๋ ์ ๋ณด์ ์ ๋ - ๋ฐ์ดํธ
- ํค๋๊ฐ ์๊ณ ํ ์ผ์ด ์๋ ๋จ์ - ์ธ๊ทธ๋จผํธ = ์ผ์ข ์ ๋ฉ์ธ์ง
Full-Duplex Service
- TCP offers full-duplex service :
After two application programs are connected to each other, they can both send and receive data. - Piggybacking :
When a packet is going from A to B, it can also carry an acknowledgment of the packets received from B
- ์์ ์ํฅ์ ๋ฐ์ง ์์, ๋ฉ์ธ์ง์ ๊ฐ์์ ์ํฅ์ ๋ฐ์
- ํต์ ํ๋ก๊ทธ๋จ - ์ฃผ๊ณ ๋ฐ๋ ์ ๋ณด๋ค, ์ด๋น ์ฒ๋ฆฌํ ์ ์๋ ๋ฉ์ธ์ง์ ๊ฐ์์ ์ํฅ์ ๋ฐ์
- ๋ด๊ฐ ๋ฐ์ ๊ฒ ์๊ณ , ๋๊ฐ ๋ณด๋ผ ๊ฒ ์์ด -> 2๊ฐ๊ฐ ๋๋ฉด
- ๋ด๊ฐ ๋ณด๋ด๋ ๋ฉ์ธ์ง + ์๋๊ฐ ๋ณด๋ธ ๊ฒ์ ๋ํ ๋์ ์ ๋ณด(์ ๋ฐ์๋ค ACK)๋ฅผ ํฌํจ
- ๋ผ์ง๊ฐ ํผ + ๊ผฌ๋ฆฌ(๋ด๊ฐ ๋ณด๋ด๋ ์ ๋ณด)๋ ์์ -> piggybacking ๐ท
- ํจ๊ป ์์ด์ ๋ณด๋ผ ์ ์๋ค.
- Connection-Oriented Services
- A’s TCP informs B’s TCP and gets approval from B’s TCP
- A’s TCP and B’s TCP exchange data in both directions
- After both processes have no data left to send and the buffers are empty, two TCPs destroy their buffers
- Reliable Service
- TCP uses the acknowledgment mechanism to check the safe and sound arrival of data
- TCP - ์ฐ๊ฒฐ ์ค์ ๊ณผ์ ์ด ์๋ค.
ํด: ๋ ๋๋ ์ฐ๊ฒฐํ๊ณ ์ถ์ด
์๋ฒ: okay
ํด: ok - ์๋ก ๋ฒํผ ์ฌ์ด์ฆ๋ฅผ ์ฃผ๊ณ ๋ฐ์
์ฐ๊ฒฐ ์ค์ - ์ด๋ค ์ ๋ณด๋ฅผ ์ฃผ๊ณ ๋ฐ์, ํด๋น ์ ๋ณด๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํต์ ์ ํ ๋
-> ๋ด๊ฐ ๋ฐ์ ์ ์๋ ๋ฒํผ ์ฌ์ด์ฆ๋ฅผ ์๋ ค์ค - UDP
๊ทธ๋ฐ๊ฑฐ ์์
๋ณด๋ด๋ฉด ๋ฐ๋ ๊ฑฐ๊ณ ,
๋ชป ๋ฐ์ผ๋ฉด ์ด์ฉ ์ ์์ง ๋ญ
Byte numbers
- There is no field for a segment number value.
- Instead, there are two fields called the sequence No. and the acknowledgment No.
These two fields refer to the byte No. - All data bytes being transferred in each connection are numbered by TCP.
- The numbering starts with a randomly generated number.
- Number range for first byte : 0 ~ 2^32 -1
(If random number is 1,057 and total number 6,000 bytes, the bytes are numbered from 1,057 to 7,056) - Byte numbering is used for flow and error control.
- ์ ์คํธ๋ฆผ์ด๋ผ๊ณ ํ๊ณ , ์ธ๊ทธ๋จผํธ๋ผ๊ณ ํ ๊น? ๋ฐ์ดํธ?
TCP ์ ์ธํ ๋๋ถ๋ถ์ ํต์ ์ํํธ์จ์ด
counting -> ๋ฉ์ธ์ง ๊ธฐ๋ฐ
๋ฐ์ดํธ๋ฅผ ๋ชจ์ผ๊ณ , ํค๋ ํธ๋ ์ผ๋ฌ ๋ถ์ฌ์, ์คํํ ๋ณด๋
๋ฉ์ธ์ง, ํจํท, ํ๋ ์ ๋ฑ๋ฑ - TCP - ๋ฐ์ดํธ ๊ธฐ๋ฐ์ผ๋ก
๋ฒ์ง์ 1~99๊น์ง ์ ๋ฐ์
1000~1999 ๋ฐ์ดํธ ๋ณด๋ด๋๊น ์ ๋ฐ์
segment์๋ 1000์ด๋ผ๊ณ ์ฐ์ฌ์์
๋ฉ์ธ์ง ๋จ์๋ก ๋ฐ์ง ์์
์๋ง์ ๋ฐ์ดํฐ ์ค, ์ผ์ผ์ด ๋ฐ์ดํธ ๋จ์๋ก ๋ฒํธ๋ฅผ ๋งค๊ธฐ๊ณ
segment ์์, ์ฒซ๋ฒ์งธ ๋ฐ์ดํฐ์ ์์๋ฅผ ์๋ ค์ค - iostream
tcp - byte ๋ฒํธ
cpp - ๋ฐฐ์ด์ ์ด๋ฆ์ ๊ทธ ๋ฐฐ์ด ์ฒซ๋ฒ์งธ element ์ฃผ์๊ฐ
segment ๋ฒํธ - ๋ฐ์ดํธ๋ค ์ค ์ฒซ๋ฒ์งธ ๋ฐ์ดํธ์ sequence ๋ฒํธ - ์?
์ฌ์ ์ก ํ ๋, ๋ฉ์ธ์ง ๋ฒ ์ด์ค๋ก ์ ์กํด์ผ ํจ
tcp -> error ๋๋ฉด? -> ์ชผ๊ฐ์ ์๋ฌ๋ฅผ ํผํด๋ด
2๊ฐ๋ก ์ชผ๊ฐ
tcp : ๋ฐ์ดํธ๋ค์ ์คํธ๋ฆผ์ผ๋ก ๋ณด๋ผ๊ฑด๋ฐ,
์๋งํผ ์งค๋ผ์ ๋ณด๋ผ๊ฑฐ์ผ
Sequence number
- After the bytes have been numbered, TCP assigns a sequence number to each segment that is being sent.
- Segment number for each segment is number of the first byte carried in that segment.
- ๋ฐ์ดํธ ๋ฒํธ๋ฅผ ์จ์ผํ๋ค -> ์ธ๊ทธ๋จผํธ 1.2.3 ์ด๋ฐ ๊ฐ๋ X
Acknowledgment number
- The value of the acknowledgment field in a segment defines the number of the next byte a party expects to receive.
- The acknowledgment number is cumulative. (๋์ ๋๋ค)
- ACK๊ฐ ์ค์ โจ
์์ ์ธก์์ ์ ๋ณด๋ฅผ ์ ๋ฐ์๋ค๊ณ ๋งํ ๋
1, 2๋ฅผ ๋ณด๋ด๋ฉด -> 3๋ฒ์ ์ค! (์ด๊ฒ ack) - ๋๋ถ๋ถ์ ํต์ ํ๋กํ ์ฝ์ ์ด๋ ๊ฒ ๋งํจ
Control field
- Enabling flow control, connection establishment and termination, and mode of data transfer in TCP
- ์ฐ๊ฒฐ ์ค์ ๋ฐ ํด์ ๋ฅผ ๋ด๋นํ๋ 6๋นํธ ๋ถ๋ถ์ ๋งํ๋ค.
- ์ด SYN ๋ฒํธ๋ฅผ ๋ง์ถ๋ฉด -> 1๋นํธ ์ธํ - ์ฐ๊ฒฐ ์์ฒญ
- ์ด์ ๋ํ ์๋ต์ ack ๋นํธ
- fin ์ฐ๊ฒฐ ํด์ - ํผ๋ ๋
์ด ๋นํธ๊ฐ ์ธํ ๋์ด ์์ผ๋ฉด ์ฐ๊ฒฐ ํด์ ์์ฒญ
TCP is connection-oriented
- A connection-oriented transport protocol establishes a virtual path between the source and destination.
- All the segments belonging to a message are then sent over this virtual path.
- Using a single virtual pathway for the entire message facilitates the acknowledgment process as well as retransmission of damaged or lost frames.
- You may wonder how TCP, which uses the services of IP, a connectionless protocol, can be connection-oriented. The point is that a TCP connection is virtual, not physical. TCP uses the services of IP to deliver individual segments to the receiver, but it controls the connection itself.
- TCP transmits data in full-duplex mode. (์ด์ค ํต์ )
- When two TCPs in two machines are connected, they are able to send segments to each other simultaneously.
- This implies that each party must initialize communication and get approval from the other party before any data are transferred.
Connection Establishment
- TCP ์๋ฒ๊ฐ ๋จผ์ ์ด์์๋ค๋ ๊ฐ์
- ํด - TCP ํ๋ ์ ๋ณด๋
syn ๋นํธ 1๋ก ํด
์ฒซ๋ฒ์งธ seq ๋ฒํธ - ๋์๋ก ๋์ - ๋์์ ์๋ฏธ๋ก ack ํด
+ syn ๋นํธ 1๋ก ํด
8000 ์ ๋ฐ์์ผ๋๊น, 8001์ ์ค
๋์ seq ์ฒซ๋ฒ์งธ ๋ฐ์ดํธ์ธ 15000์ ์ค - ์ฌ๊ธฐ์ syn ๊ฑฐ์ ํ๋ฉด -> 1๋ฐฉํฅ ํต์ ์ด ๋จ
์ฐ๊ฒฐ ํด์ ํ ๊ฒ -> ๋์ํ ๊ฒ
ํ์ง๋ง ๋๋ ์์ง ๋์๊ฒ ํ ๋ง์ด ์์ด
์ด๋ฐ ๊ฒ๋ ๊ฐ๋ฅ - ํด - 15001 ์ค -> ์ด ๊ณผ์ ์ ํตํด ๋ TCP ์ฐ๊ฒฐ ์๋ฃ
ํ๋ฆ ์ ์ด๋ฅผ ์ํ ์ค๋น๊ฐ ์๋ฃ๋จ
- Simultaneous Open
- Simultaneous Open may occur when both processes issue an active open.
- In this case, both TCPs transmit a SYN+ACK segment to each other, and one single-connection is established between them.
- SYN Flooding Attack
- SYN Flooding Attack happens when a malicious attacker sends a large number of SYN segments to a server, pretending that each of them is coming from a different client by faking the source IP addresses in the data-grams.
- The SYN flooding attack belongs to a type of security attack known as a denial-of-service attack, in which an attacker monopolizes a system with so many service requests that the system collapses and denies service to every request.
- syn ๊ฑฐ๋ถ ํ ์ ์์ -> ์ด๊ฑด ํต์ ์ํ๊ฒ ๋ค๋ ์๋ฏธ
syn ์์ฒญ ๋ง์ด ๋ณด๋ด๋ฉด, tcp ์๋ฒ๊ฐ ์ฃฝ์ -> ์ด๊ฒ ํดํน
but, tcp ์ฐ๊ฒฐ ์์ฒญ์ ๊ฑฐ์ ํ ์ ์์์
-> ip ์ฃผ์๋ฅผ ์ฐ๊ฒฐํจ: ๋ ๊ณ์ ์ค๋ฉด - ์์ํจ -> ๋ธ๋๋ฆฌ์คํธ์ ์ฌ๋ฆผ
๊ฐํ์ ์ผ๋ก ๋จ๊ตผ (์ ์์ผ ์ ์์ผ๋๊น)
์๋๊ฐ ์ฌ์ ํ๊ฑฐ ๊ฐ์ -> ์์ ์ฐจ๋จ
* ์ด๊ฑด tcp ์๋ฒ๊ฐ ํ ์ ์๋๊ฒ ์๋์ผ (ํ์ด์ด์)
Data transfer
- Pushing Data
- The application program at the sending site can request a push operation that the sending TCP must not wait for the window to be filled.
- It must create a segment and send it immediately.
- Urgent Data
- When the sending application program wants a piece of data to be read out of order by the receiving application program.
- Sender can send a segment with the URG bit set.
- When the receiving TCP receives a segment with the URG bit set, it extracts the urgent data from the segment, using the value of the pointer, and delivers them, out of order, to the receiving application program.
- ๋นํธ ์์ SYN FIN ACK ๋ง๊ณ ,
PUSH / URG ๋นํธ๊ฐ ์๋ค.
ํธ์ฌ ๋นํธ - ๊ฐ์ฅ ๋จผ์ ๋ณด๋ธ๋ค.
์ด์ ํธ - ๊ธด๊ธํ ๋ฉ์ธ์ง์ด๋๊น, ๋ฐ์ ๋ง์ ์๋ก ์ฌ๋ ค๋ผ
Connection termination
- ํด๋ผ์ด์ธํธ๊ฐ ๋ณด๋ผ ๋ฐ์ดํฐ๋ ๋ค ๋ณด๋๊ณ , ์๋ฒ ์ ์ฅ์์๋ ๋ ๋ณด๋ผ ๋ฐ์ดํฐ๊ฐ ์์์
- ์๋ก ์ ๋ณด๋ด๋ ค๊ณ ์ฐ๊ฒฐ ํด์ ํจ -> ack๊ฐ ์์ค๋๊ฑด ์๋๋ค.
- ๋ฐ์ดํฐ๋ฅผ ์ ๋ณด๋ด๋๊ฒ ์ฐ๊ฒฐ ํด์ , ํ๋๋ก ํฉ์น๋ ๊ฒ ๋์์
flow control
- ์์ ๋ฒํผ ์ฌ์ด์ฆ์ ๋ณํ๋ฅผ ์๋ ค์ฃผ๋ ๊ฒ
- ๋ฆฌ์๋ธ์๋์ฐ: rwnd -> ์์ ๋ฒํผ ์ฌ์ด์ฆ ๋ณด๋ด์ค๋ค
r window : ํ๋ฒ์ ๋ณด๋ผ ์ ์๋ ์ต๋ ๋ฐ์ดํธ๋ 800์ด์ผ
๋ณธ์ธ์ด ๋ณด๋ธ ์ํ์ค ๋๋ฒ - ์ค์ํ์ง ์์. - ์ ๋ฐ์์ผ๋ 200 ์ง์ ๋ค.
ํ์ง๋ง ๋ณด๋ผ ์ ์๋๊ฑด 600์ด๋๊น, ๊ธธ์ด๋ฅผ 600์ผ๋ก ์ ์ง
์๋ค๊ฐ ๊ธธ์ด ์กฐ์ ํจ - ํ๋ฆ ์ ์ด - flow control
์ด๋ ๊ฒ ์ซ์์ ๋ฒํผ ๊ฐ๊ณ ํ๋ ๊ฒ
Normal operation
โฐ ํ์ด๋จธ๊ฐ ํฐ์ง
์๋๋ฐฉ์ด ๋ณด๋ด๋ ๋ฐ์ดํฐ ์กฑ์กฑ ์ ํฌ๋ฅผ ๋๊ธฐ๋ฉด
๋ถํ๋ฅผ ๊ทธ๋๋ก ๋๊ธฐ๊ธฐ ๋๋ฌธ์, ๋ ๋ค ์ฃฝ์ ์ ์๋ค.
์ ์ ์๊ฐ์ด ์ง๋ฌ์ ๋ ACK๋ฅผ ๋ณด๋ด๋ ๊ฒ
-> ์๋๋ฐฉ์ด ์ฒ๋ฆฌํ ACK์ ๋ถํ๋ฅผ ์ค์ด๋ ๊ฒ
ํต์ ์
์ด๋น ๋ฉ์ธ์ง ์ฒ๋ฆฌ ๊ฐ์ packet / sec
๋ฐ์ดํฐ๊ฐ ์๋๋ผ!
Lost segment
- ๋ฐ๋ก ์ฌ์ ์ก ํ์ง ์์
- ํ์ด๋จธ๊ฐ ํฐ์ง๊ณ ์ฌ์ ์ก
- ์๋ฌ๊ฐ ๋ ์ํฉ์์ ์จ๊ฑด์ง, ๋ด๊ฐ ๋ณด๋ด๊ธฐ ์ ์ ๋ณด๋ธ๊ฒ ์ด์ ์จ๊ฑด์ง ์ ์ ์๋ค.
- ๋ฐ๋ผ์ ์ ํฌ๊ฐ ๋ด๊ฐ ๋ณด๋ธ๊ฑฐ ๋ค์ ๋์ฐฉํ๋ค๋ ์ด์ ๋ง์ผ๋ก
์๋ฌ์ฌํญ์ด๋ผ๊ณ ํ๋จํ ์๋ ์๋ค - ๊ทธ๋์ ํ์ด๋จธ๋ก ๊ณ์ ๊ธฐ๋ค๋ ค์ฃผ๋ ๊ฒ
Fast retransmission
- ์ค๊ฐ์ ํ๋ ๋ ๋ผ๊ฐ
๋๊ฐ์ ACK๊ฐ 3๋ฒ ์ฐ์ ์๋ค. - ๊ต์ฅํ ๋ง์ ๋ฐ์ดํฐ๋ฅผ ๋์์์ด ๋ณด๋ด๋ ์ํฉ
์๋๊ฐ ๋ฐ์๋๋ฐ, ์๋ฌ -> ๊ฐ์ seq num ACK 3๊ฐ๊ฐ ์ฐ๋ฌ์ ๋์ฐฉ - ๋ฐ๋ก ์ฌ์ ์ก์ ์ด๋ฒ๋ฆผ (์๊ฐ์ ๋น์ด๋ค๋ ๊ฑฐ - ์๋ฌด ๊ฒ๋ ์ ํ๋ค๋ ๊ฒ)
๋๋์ ๋ฐ์ดํฐ๋ฅผ ๋ณด๋ด๊ณ , ๋คํธ์ํฌ๊ฐ ์์ ํ๋์๋ค๋ ๊ฐ์ ํ์,
์ฌ์ ์ก ํ๋จํ๊ณ ๋ฐ๋ก ์๋ค.
Slow start, exponential increase
- TCP๋ฅผ ๋ฒ๋ฆฌ๊ฒ ๋ ๊ทผ๋ณธ์ ์ธ ์์ธ
- ์์ ์๋์ฐ 16๋นํธ ๋๋ฆด ์ ์๋ค
์์ ๋ฒํผ ์ฌ์ด์ฆ๊ฐ ์ ๋ค
์ด๊ฒ์ด tcp์ ์ฒซ๋ฒ์งธ ํ๊ณ - ์์ ๋ฒํผ ์ฌ์ด์ฆ๋ฅผ ์์๋ ๋ถ๊ตฌํ๊ณ ,
์ ์ก๊ณผ ๊ด๋ จ๋ ํํฐ๊ฐ ๋ ์๋ค.
์ฒ์ฒํ ์์ํ๊ณ , ์ง์์ ์ผ๋ก ์ฆ๊ฐํ๋ค.
- ํ ๋ฒ์ ๋ฒํผ๋ฅผ ๋ค ์ฑ์ธ ์ ์๋ค.
Cwindow -> congestion ์๋์ฐ
์ด๊ธฐ ์ฐ๊ฒฐ ์ค์ ๋๋ ์ดํ,
1 = ์ต๋ ์ธ๊ทธ๋จผํธ์ฌ์ด์ฆ ํ๋๋ฅผ ๋ณด๋ผ ์ ์์ - ์?
์์ ๋ฒํผ ์ฌ์ด์ฆ? -> ์๋๋ฐฉ ์ปดํจํฐ์ ํ๋ก์ธ์ค๋ฅผ ์ํ ๋ฒํผ
์ค๊ฐ์ ๋คํธ์ํฌ๊ฐ ์ด๋ป๊ฒ ๋ ์ง ๋ชจ๋ฅด๊ธฐ ๋๋ฌธ์
ํ๊บผ๋ฒ์ ์ด ๋ฒ๋ฆฌ๋ฉด -> ๋๊ฐ์ ์ ๋ค์ด ๋ง์ด ์์ ๋, ์ธํฐ๋ท์ด ๋ง๊ฐ์ง ์ ์๋ค.
๋ฐ๋ผ์ ์ต์ด ์ฐ๊ฒฐ ์ค์ ์, cwnd 1๋ก ์ค์ ๋์ด ์์ผ๋ฉด, ์๋๋ฐฉ ๋ฒํผ๋ฅผ ๋ฌด์ํจ - ์ดํ ๊ทธ ๊ฐ์ด ๋์ด๋จ
cwnd - max segmentsize ์๋ฏธ -> ์ฆ ์ด์ ๋ 2๊ฐ๋ฅผ ๋ณด๋ผ ์ ์๊ฒ ๋๋ค.
๊พธ์คํ๊ฒ ACK๋ฅผ ์ฃผ๊ณ ๋ฐ์ผ๋ฉฐ, 2๋ฐฐ์ฉ ์ง์์ ์ผ๋ก ์ฆ๊ฐํด์ 64 KB๊น์ง ๊ฐ๋ค. - Congestion avoidance, additive increase
- ๋ฆฌ๋์ดํ๊ฒ ์ฆ๊ฐํ ์๋ ์๋ค: 4->5->6
Linear vs Exponential increase
- ์ธ์ ๋ ์ง์์ , ์ธ์ ๋ ๋ฆฌ๋์ด?
๋ด๊ฐ ์๋๋ฐฉ์๊ฒ ACK ์์ด ๋ณด๋ผ ์ ์๋๊ฑด ์ธ๊ทธ๋จผํธ ํ๋
ACK ์ ๋๋ก ์ด -> 2 -> ACK -> 4 -> ACK -> 8 - ํ์ ์์ ๋ฐ์ : ACK ์ ์ค๊ฑฐ๋, ์ ๋ณด๊ฐ ๋ชป ๊ฐ๊ฑฐ๋, ACK ๋ฆ๊ฒ ์ค๊ฑฐ๋ ์
์ค ํ๋
์ด์จ๋ ์ผ๋๋ ํ์ด๋จธ๊ฐ ํฐ์ก๊ณ , ์๋ฌ๋ก ๊ฐ์ง
-> ๋ค์ ์ด๊ธฐ ๊ฐ์ธ 1๋ก, ๋ ๋จ์ด์ง - error: ์ธํฐ๋ท์ด ๋ถ๋น๊ณ ์๋ค๋ ๊ฒ
์๋๋ฐฉ ์ปดํจํฐ๋ก ๊ฐ๊ธฐ ์ํ ๋คํธ์ํฌ ์ค or ๊ทธ ๊ฒฝ๋ก๋ค ์ค ํ๋ ๋ฑ๋ฑ ๋ถ๋น๋ค๋ ๊ฒ
๋ถ๋น์ง ์๋๋ก ์ค์ด๋ ๊ฒ - ์์ ๋ฒํผ์ ์๊ด ์์ด ๋ค์ 1๋ก ๋จ๊ตฐ๋ค.
ํฐ์ง 8 / 2 -> 4 (ํ์ ์์์ 2๋ก ๋๋ ๊ฐ -> ๊ฒฝ๊ณ๊ฐ ๋๋ค.)
1 -> ACK -> 2 -> ACK -> 4
์ด ์ํ์ 4 ์ ๋๋ฌ -> ์ง์์ ์ด ์๋๋ผ, ์ ํ์ ์ผ๋ก ๋ฆฌ๋์ดํ๊ฒ ์ฆ๊ฐ
๋ ์๋ฌ ๋๋ฉด ๋ค์ 1
-> ์ด๋ฒ์๋ 12๋๊น 6์ด ๊ฒฝ๊ณ (๊ทธ ์ดํ๋ ๋ฆฌ๋์ด)
Additive increase, multiplicative decrease
- TCP์ ํฑ๋ ๋ฐํด๊ฐ ์ฑ๋ฅ ์ ํ์ ๊ฐ์ฅ ํฐ ์์ธ
- ๋คํธ์ํฌ์ ์ํฉ๊ณผ ์๊ด ์์ด, ์ต์ด ์ฐ๊ฒฐ์์๋ TCP๋ ์ผ๋จ ๋ฌด์กฐ๊ฑด ๋๋ฆฌ๋ค.
- CWND๊ฐ 1์์ ์์ํ๋๊น, ๋ฌด์กฐ๊ฑด ๋๋ฆผ
- ๋คํธ์ํฌ ์ํฉ์ ๋ฐ๋ผ ๋ฐ์ํ๋ ์๋ฌ -> ๋ด ์์ผ๋ก ์ด๋ป๊ฒ ํ ์ ์๋ ์ํฉ
- ์ด๋ ๊ฒ ๋๋ฉด TCP๋ ์ต์ ์ํฉ์ผ๋ก ๋์๊ฐ
- ์ ์ด์ TCP ์ง์ํ๋ ๋คํธ์ํฌ
- ์ต์ ์ธํฐ๋ท ์๋ ์ง์ ์์ฒด๊ฐ ๋ถ๊ฐ๋ฅํ ๋คํธ์ํฌ
- ์ธํฐ๋ท์ ๊ฐ๋ก์ง๋ฅด๋ ๊ฒฝ์ฐ์๋, ์ด๋ ํ ํ๋ฆฌํฐ๋ ๋ณด์ฅํ ์ ์๋ค.
'ComputerScience > FullStackProgramming' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[ํ์คํ] TCP ๋น๋๊ธฐ์ socket server programming (1) | 2023.04.16 |
---|---|
[ํ์คํ] TCP Socket programming (1:1) (0) | 2023.04.12 |
[ํ์คํ] UDP - User Datagram Protocol (0) | 2023.04.11 |
[ํ์คํ] Transport Layer 4 / Process-to-Process Delivery (0) | 2023.04.11 |
[ํ์คํ] 3 Layer Router, IP address, DNS (0) | 2023.04.08 |