2022. 5. 2. 01:04ㆍ컴퓨터 공학/네트워크
연결 지향 통신 : TCP
먼저 연결 지향에 대해 얘기하기 이전에 TCP는 RFC 793, 1122, 1323, 2018, 2581의 인터넷 표준 통신 방식이다.
현재 98%라고 말해도 과하지 않을 정도로 전 세계 대부분의 통신이 TCP를 사용하고 있다.
그렇다면 왜 모두 TCP를 사용할까? 아래 TCP의 특징에 대해서 알아보자.
> "연결 지향"
TCP는 연결 지향 통신이다.
그렇기 때문에 반드시 수신자와 송신자 간의 연결이 되어 있어야 통신을 한다.
TCP는 어떻게 수신자와 송신자가 연결되었는지 확인을 할까?
이는 3-way handshaking이라는 방식을 사용해서 송/수신자간 확인을 한다.
3-way handshaking을 진행하면서 송신자와 수신자의 상태 파라미터를 실행시킨다.
그럼 '연결'은 어떻게 수립될까?
당연히 직접적인 회로 연결이 아닌 논리적인 end-to-end 연결방식이다.
그도 그럴 것이, 인터넷 통신은 end point에 도달하기 위해서 수 많은 서버들을 지나서 연결되는 방식이기 때문이다.
(그럼 어떻게 맞는지 아냐고? -> handshaking)
> "Point-to-point"
오직 하나의 송신자와, 하나의 수신자만 존재한다.
그외에 다른 존재가 나의 연결에 끼어들지 않는다.
> "Full duplex data"
duplex라는 말이 낯설 것이다. '이중' 이라는 뜻인데,
하나의 연결에 송/수신자가 모두 데이터를 전송할 수 있다는 의미이다.
그렇기에 다른 연결을 만들지 않고, 하나의 연결 만으로도 가능하다.
> "Flow controlled"
'흐름을 제어하는' 정도로 이해하면 뭔가 찝찝하다.
흐름에 대해서 알기 전 buffer의 존재에 대해 알아야 한다.
수신자는 송신자로부터 stream 형태로 된 data의 byte를 받는다.
이때 수신자는 송신자로부터 온 데이터를 buffer에 저장하는데,
buffer가 넘친다면 데이터가 유실될 수 있지 않겠는가?
그렇기에 수신자는 송신자의 buffer용량을 넘는 데이터는 전송하지 않는다.
> "Reliable, in-order, byte stream"
TCP는 신뢰가능한 통신 방식이다.
신뢰가능하다는 것은 무엇인가?
내 데이터가 보낸 순서대로 잘 도착하고, 데이터의 손실이 없는 것이지 않겠는가?
바로 TCP가 그렇다.
TCP는 송신자의 메시지를 byte의 stream 형태로 변경해서 이를 수신자에게 전달하는 방식이다.
이에 대해서는 이후 자세하게 기술하겠다.
여러 TCP들
TCP는 단 하나의 TCP만 존재하는 것은 아니다.
TCP도 발전을 거듭해오고 있는데, 특징들로는 slow start, congestion avoidance, fast recovery를 꼽을 수 있다.
TCP는 1974년 가장 처음 만들어졌다. 이름은 TCP Tahoe.
Tahoe는 fast recovery가 없었다.
이후 등장한 것이 TCP Reno.
Reno는 곧 New Reno에 의해서 교체됐고, New Reno가 등장하면서 fast recovery가 도입되었다.
New Reno는 현재 대부분의 OS에서 기본으로 채택되어 사용되고 있는 TCP 방식이다. (윈도우)
이후 TCP vegas가 94년 래리 피터슨에의해 만들어지고, 2001년 TCP Westwood를 거쳐
2004년 이인종 당시 노스캐롤라이나대학 교수가 TCP BIC을 개발했고,
2008년 리뉴얼 된 TCP CUBIC을 개발했다.
TCP CUBIC은 현재 리눅스의 기본 통신 방식이다.
이외에도 TCP Hamilton, TCP FAST 등이 있지만 여기에 대해서는 다루지 않고,
가장 많이 쓰이는 TCP new Reno에 대해서 다루려고 한다.
위에 언급한 TCP들의 가장 큰 차이점은 혼잡 컨트롤 알고리즘(congestion control algorithm)이라고 할 수 있다.
간략한 정리
- TCP는 연결 지향 통신 방식이다.
- hanshaking을 통해서 연결을 수립한다.
- 신뢰할 만한 통신이다.
- 지금까지도 발전을 거듭하고 있으며, 가장 많이 사용되는 것은 TCP new Reno이고, 리눅스는 TCP CUBIC을 사용한다.
'컴퓨터 공학 > 네트워크' 카테고리의 다른 글
(네트워크) gRPC로 가는길(1) / HTTP의 역사(1.0, 1.1, 2.0) (0) | 2023.02.26 |
---|---|
(네트워크) UDP에 관한 짧은 지식 (0) | 2022.04.21 |
TCP가 뭘까? (0) | 2022.03.05 |
(네트워크) IP란 뭘까? (0) | 2022.03.03 |