전송계층은 데이터 링크 계층과 기능적 측면(흐름제어, 오류제어, 순서 확인 ---)에서 유사하다.
그러나 데이터 링크 계층은 물리적 선로를 사용하기 때문에 라우팅 기능이 필요없고 (Node to Node)
전송 계층은 논리적 선로를 사용하기 때문에 라우팅 기능이 필요하다.
Logical Link를 통해 데이터가 호스트에서 호스트까지 전송되는 시간동안 지연이 발생한다.
그 말은 지연이 발생하는 그 시간동안 데이터가 네트워크에 저장돼있다고 볼 수도 있는데, 이 때문에 네트워크를
잠재적 기억 장치라고 부르기도 한다.
TCP 주요기능
1. 흐름제어 : 데이터 링크와 유사하다. 수신 버퍼가 넘치면 패킷 손실이 발생하므로 송신 윈도우의 하단값을 조절한다.
2. 오류제어 : 데이터 변형과 분실의 처리로 대부분 소프트웨어 동작과정에서 발생한다.
오류제어에 의해서 복구되는 데이터들은 수신 프로세스의 요구 혹은 송신 프로세스의 확인으로 이루어진다.
3. 분할-병합 : 상위계층에서 내려주는 데이터가 너무 크면 이를 패킷으로 소분해 전송해야 한다. 패킷을 작게 소분하는 것을 분할, 하나로 합치는 것을 병합이라고 한다.
4. 서비스 프리미티브 : 전송계층 사용자가 전송계층 서비스(연결형, 비연결형)를 사용하기 위한 인터페이스
TCP 설계시 고려사항
1. 주소
네트워크에서 가장 중요한 것은 데이터가 어디로 이동해야 하는지이다. 그러기 위해서 송수신호스트의 주소가 필요하고 이 주소는 TCP/IP 환경에서 정해진다.
IP주소와 포트번호의 쌍인 IP:port# 의 꼴로 표현디는데 전송계층의 주소를 TSAP라고도 한다.
주소는 구조적 표현과 비구조적 표현으로 나뉠 수 있는데 구조적 표현은 주소를 보고 상세한 위치 정보나 계층관계를 확인할 수 있는 표현들을 말한다. 대표적으로 집주소가 있다.
비구조적표현은 단순 IP주소같은 숫자주소를 의미하는데 DNS를 이용해 이 숫자 주소를 구조적 표현 방식의 주소와 대응시켜 사용하고 있다.
Port : 프로세스와 프로세스 사이의 통신을 지원하는 것으로 네트워크 프로세스는 포트번호로 구분된다.
2. 멀티 플렉싱
TPDU(전송계층의 데이터 전송단위)의 목적지가 동일할 때 데이터를 하나의 가상회선에 실어서 보내는 방식이다.
- 상방향 멀티 플렉싱 : 다수의 전송계층 연결에 하나의 네트워크 계층 연결
- 하방향 멀티 플렉싱 : 하나의 전송계층에 여러 네트워크 계층 연결
프로세스 연결설정
2단계 연결 설정
연결을 원하는 프로세스 A 가 Conn_Req로 프로세스 B에게 연결을 요청한다.
B가 요청을 받아 들이면 Conn_ACK로 승인함을 회신한다.
즉, TCP 연결을 위해선 양 프로세스의 합의가 있어야 가능한 것!
하지만 실제 네트워크는 오류의 위험성이 존재하기 때문에 신뢰성을 높인 3단계 연결 설정 방식을 사용한다.
3단계 연결 설정
오류 제어를 위해 A가 연결 요청을 보낼 때 자신의 순서번호를 함께 보낸다. TCP는 피기배킹 방식을 사용하므로 B는 응답 패킷으로 자신의 순서번호인 y를 넣고 ack 번호를 넣어서 회신한다. B의 회신에 대한 ACK도 보내야 하는데 보통 데이터를 전송함으로써 확인했음을 표시한다.
프로세스 연결해제
양방향 통신시 종료
논리적 단일의 양방향 통신으로 한측의 연결종료로도 연결이 종료된다.
점진적 연결해제 절차
두 원통(연결)이 구분되기 때문에 연결해제 요청시 해제대상 연결이 명시되어야 한다.
이런 연결에서는 두 연결 중 하나가 끊어지더라도 다른 하나는 보내던 것을 마저 보낸 뒤에 종료된다.
양측 모두의 연결 종료로 연결이 종료된다.
TCP
TCP는 IP프로토콜 위에서 연결형 서비스를 지원하는 전송계층 프로토콜이다.
- 연결형 서비스 지원
- 전이중 방식의 양방향 가상회선
- 신뢰성 있는 데이터 전송
이러한 TCP의 기능들은 운영체제 내에서 구현되기 때문에 SystemCall을 이용해서 사용해야 한다.
TCP 프로토콜에서 데이터는 세그먼트라 불리며 크기가 가변적이다.
세그먼트의 크기를 기준으로 순서번호의 숫자를 늘려가며 따로 순서번호에 관여할 필요가 없다.
TCP 헤더에는 SourcePort#, DestPort#, Sequence#, ACK# 등이 있다.
특수한 경우에 사용하는 Flag 비트로 ACK, SYN, FIN 플레그가 있다.
TCP에서 혼잡제어를 위해 최근에 도입된 ECN을 위한 플레그 비트로 CWR과 ECE가 있다.
- CWR : 송신 프로세스가 송신윈도우의 크기를 줄였음을 알려 더이상 ECE를 전송하지 말라는 의미로 사용
- ECE : ECN-Echo로 라우터가 송신 프로세스에 명시적으로 혼잡을 알리려 사용
라우터는 ECE 필드값에 CE값을 지정해 수신호스트에게 전송한다.
송신 호스트에 바로 전송하지 않는 이유는 중복된 ECN 패킷이 생성되는 것을 막기 위함이다.
ECE필드의 CE값을 확인한 수신 호스트는 송신 호스트에게 ECE 헤더값을 표시한 채로 데이터를 전송해
혼잡 사실을 알린다.
TCP상의 주소체계, PORT
포트번호는 UNIX에서 소켓 시스템 콜을 이용해 포트연결 설정시 사용된다.
클라이언트가 서버에 데이터를 요청할 때 IP주소:포트#의 쌍으로 정보를 보낸다.
자주 쓰이는 응용프로그램들의 포트번호는 지정되어 있어서 같은 값을 사용하길 권고받는데 이러한 포트번호를 Well-Know Port # 라고 한다.
FTP(data) : 20
FTP(control) : 21
HTTP : 80 ...
TCP 데이터 전송
데이터 송수신시에 전송 오류는 순서번호에 의거하여 처리한다.
순서번호가 중간에 사라졌다 혹은 순서번호에 해당하는 ACK가 안왔다 이런 경우에 분실했다고 판단하고 송신 호스트의 재전송으로 오류를 처리한다.
TCP는 NAK를 지원하지 않기 때문에 데이터 변형에도 같은 방법으로 대응한다.
연결 해제시에는 해제를 원하는 프로세스가 먼저 FIN 비트를 세그먼트에 태워서 보낸다.
상대 프로세스는 자신이 원하는 만큼 데이터를 쭉 보내다가 더이상 연결을 유지할 필요가 없어질 때 FIN 비트를 세그먼트에 태워서 보낸다.
이에 대한 긍정응답확인을 보내면 연결이 종료된다.
혼잡제어는 ECN 패킷과 함께 이루어진다. TCP 헤더에 ECE, CWR 플레그를 사용하고 IP 헤더에 ECN 필드를 정의해서 사용한다.
TCP 연결 단계에서 위 그림과 같이 ECN을 사용할 것인지 아닌지부터 협상해야 한다.
ECN 필드 값은 ECT(01 or 10) 으로 변경해서 전송한다.
2021-12-05
'Computer Science > Computer Network' 카테고리의 다른 글
WWW (0) | 2021.12.15 |
---|---|
전송계층 (0) | 2021.12.12 |
네트워크 계층 (0) | 2021.11.30 |
IP 프로토콜 (0) | 2021.11.26 |
데이터 링크 계층 (0) | 2021.11.24 |