전송 프로토콜
전송 프로토콜에 대해 살펴보고 대표 전송 프로토콜인 UDP와 TCP에 대해 학습한다.
프로세스 간의 통신
- 데이터링크 계층은 이웃한 두 노드 사이의 프레임 전달에 관여
- 노드 to 노드 전달
- 에러제어가 주기능
- 인접한 노드간에 0과 1의 비트들의 나열을 보내면 매체를 통해 예러가 발생할 수 있음. 이를 해결
- 접근제어, 흐름제어도 수행
- IP와 같은 네트워크 계층은 두 호스트 사이의 패킷 전달에 관여
- 호스트 to 호스트 전달
- 라우팅(경로 설정)이 주기능-가장 최적의 경로를 찾음
- 수송 계층 프로토콜은 프로세스 사이의 메시지전달에 관여
- 프로세스 to 프로세스 전달
- 포트 번호가 프로세스 간의 전달에 사용
클라이언트/ 서버 구성
- 프로세스간의 통신은 클라이언트/서버 구성을 통해서 이루어짐
- peer to peer로 동작하는 경우도 있지만 대부분은 클라이언트/서버 형태로 동작
- 포트 번호는 수송 계층에서 사용하는 주소로서 특정 호스트에서 실행되는 프로세스를 구분하기 위해 사용
- 포트 번호는 16비트 정수로서 0에서 65535(2^16-1) 사이의 값을 갖음
- 클라이언트 프로그램은 포트 번호를 갖게 되는데 운영체제에 의해서 선택된다.
- 이러한 포트는 일시적으로 할당되고 사라져서 임시 포트 번호(ephemeral port number)라 한다.
- 서버 프로그램은 인터넷에서 식별을 위해 동일한 포트 번호를 갖는다.
- 이러한 포트는 고정적으로 할당되고 모두 알고 있어야 하기 때문에 알려진 포트 번호(well-known port number)라 한다.
포트 번호
- IANA는 포트 번호를 3개의 영역으로 구분
- Well-known ports(서버 쪽)
- 이 포트는 0~1023 이 할당되며 인터넷 서비스를 위해 사용
- Registered ports
- 이 포트는 1024~49151의 범위를 가지며 특정 응용을 위해 기업이 사용
- 중복이 일어나지 않도록 등록해서 사용하는 것
- Dynaimic ports(클라이언트 쪽)
- 이 포트는 49152~65535의 범위를 가지며 등록되거나 통제되지 않으며, 임시 포트로 이용
- Well-known ports(서버 쪽)
UDP(User Datagram Protocol)
- UDP는 비연결형, 비신뢰성 수송 프로토콜
- 흐름제어나 에러제어가 없음
- UDP가 에러를 검출하면 단순히 폐기
- 연결설정이나 종료과정이 없음, 재전송이 없음
- 데이터그램들 사이의 서로 관련이 없으며, 번호가 붙지 않음
- 각 UDP 데이터그램은 서로 다른 경로로 전달
- 수신자는 수신 메시지로 오버플로우 될 수 있음
- 송신자는 메시지가 유실되거나 중복되었는지 알 수 없음
- UDP는 오버헤드가 작은 아주 단순한 프로토콜에 이용
-
- DNS와 SNMP를 많이 사용
- UDP 포트번호 53번과 DNS는 동의어
- 인터넷에서 사용하는 응용에 해당되는 프로토콜들은 다 이렇게 포트번호가 할당이 되어있다.
- User datagram
- UDP는 8바이트의 고정된 크기의 헤더를 갖음. 총 4개의 필드
- 체크섬(Checksum )
- 체크섬 계산은 선택 사항
- 체크섬에서 헤더와 사용자 데이터의 에러를 확인함
- 체크섬의 값이 계산되지 않으면, 해당 필드의 값이 0이 됨
- 체크섬은 전체 1의 보수 덧셈해서 나온 결과를 다시 보수를 취한다.
- UDP 체크섬 계산은 IP나 ICMP와 달리 가상헤더를 만들어서 계산
- 가상헤더, UDP 헤더, 데이터에 대해서 체크섬을 수행
- 가상헤더는 IP패킷의 헤더에서 가져온 정보로 구성
- 송신자 IP주소, 목적지IP주소, 프로토콜 필드, 전체길이 필드로 구성
- IP헤더가 잘못되면 잘못된 호스트나 잘못된 수송계층 프로토콜로 전달되므로 한번 더 검사
- UDP 사용
- UDP는 간단한 요청-응답 서비스에 적합
- 연결설정/해제 과정의 오버헤드가 없음
- UDP는 프로세스에서 내부 흐름제어와 에러제어를 갖는 경우 적합
- 응용 프로그램이 자체적으로 갖고 있는 기능을 중복해서 가질 필요가 없음
- UDP는 멀티캐스팅에 적합
- 그룹에 속한 모든 세스템과 연결 설정할 필요 없음
- UDP는 SNMP같은 망관리시스템에서 사용
- UDP는 RIP에서 사용
- UDP는 간단한 요청-응답 서비스에 적합
- 체크섬 계산은 선택 사항
TCP 프로토콜
TCP 프로토콜과 TCP의 기능에 대해 살펴보고 TCP의 메시지 형태인 세그먼트의 각 필드에 대해 알아본다.
다음으로 TCP는 연결과정과 해제과정이 있는데, 이 과정에 대해 살펴보고 세그먼트의 흐름을 어떻게 제어하는지에 대해 학습한다.
TCP의 기능
- TCP는 프로세스간 통신, 스트림 전달 서비스, 전이중 통신(Full duplex), 연결 지향 서비스, 신뢰성 있는 서비스를 제공
- 연결설정과 해제과정이 존재
- 데이터의 안전한 도착을 확인하는 ACK를 사용하여 신뢰성 있는 전송을 제공
- TCP는 프로세스 간의 통신을 위해 포트 번호를 사용
- IP의 문제점을 보완
- IP는 비신뢰성 프로토콜이기 때문에 가다가 중간에 패킷이 손실되거나 단편화가 발생하면 순서가 바뀔 수도 있는데, TCP가 다시 복구하고 순서도 맞춰주는 역할도 한다.
- TCP에서 잘 알려진 포트
- DNS는 UDP 써보고 잘 안 되면 TCP 사용
- TCP는 모든 바이트에 번호를 부여
- 시작 번호는 0~232-1 사이의 임의이 번호를 갖음
- 번호는 흐름제어와 에러제어에 사용
- 흐름제어에서는 "다음 100바이트까지만 보내줘" 라고 요청할 수 있음
- 에러제어에서는 "몇 번째 바이트로 시작하는게 안 왔어" 라고 요청할 수 있음
- 세그먼트의 순서번호는 해당 세그먼트가 나르는 데이터의 첫 번째 바이트 번호
- ACK 번호는 수신해야 할 다음 바이트 번호
- ACK번호는 누적 값으로 해당 번호 이전의 모든 바이트를 안전하게 받았음을 의미
- 예를 들어, 1234가 ACK번호라면, 1233 바이트까지 모두 받았음을 의미
스트림 전달 서비스
- TCP는 데이터를 바이트의 나열로 전달
- 효율성을 위해 여러 바이트를 블록으로 구성된 세그먼트를 만들어 전송
세그먼트 형태
- TCP 메시지 전체를 세그먼트라고 부른다. 세그먼트 앞단에 헤더가 붙는다.
- 헤더는 최소 20바트이며, 옵션까지 최대 60바이트
- HLEN
- 가변적인 크기를 갖는 헤더 때문에 어디까직 헤더인지를 나타내는 헤더 Length가 있다.
- Reserved
- 이 세그먼트가 연결설정인지, 연결해제인지 등 세그먼트의 목적을 Reserved에 옵션을 체크한다.
- 윈도우 사이즈
- 버퍼의 크기를 표시한다. 흐름제어를 하기 위해 지금 비어있는 용량을 바탕으로 요청 데이터 크기를 나타내는데 쓰인다.
- 흐름제어 목적
- 제어 필드(Reserved 6bits)
- 여러 비트가 동시에 설정될 수 있음
- 부정적 ACK(NACK)가 없음
- URG:Urgent pointer is valid
- TCP헤더 다음부터 어디까지가 데이터 부분에서 빠르기 처리해야할 데이터인지 표시하는 것을 Urget pointer
- 빨리 처리해야 될 데이터를 포함하고 있따라는 것을 표시한 게 URG 부분
- 송신자는 수신자가 순서에 관계없이 우선적으로 데이터가 처리되길 원할 수 있음
- 긴급데이터는 헤더 바로 다음부터 포함된다.
- ACK:Acknowledgment is valid
- 몇 번까지 잘 받았다는 것을 의미
- PSH: Request for push
- TCP에서 버퍼링이라는 것이 있는데, 버퍼링을 하지 말고 바로 보내라는 신호를 보내는 필드
- 버퍼가 꽉 차야지만 TCP 세그먼트를 전송하게 되는데 버퍼가 꽉차지 않더라도 바로 데이터를 보내라는 것
- 지연된 전송은 대화식 응용(Interactive applications EX. telnet)에서는 바람직하지 않음
- RST: Reset the connection
- 연결을 재설정하는 필드
- 비정상적인 상황이나 오랫동안 통신이 없으면 현재의 연결을 끊음
- SYN: Synchronize sequence numbers
- 연결을 설정하는 필드
- FIN
- 연결의 종료를 알리는 필드
- 체크섬
- 에러제어
- 데이터에 대한 오류를 검사하여 재전송에 의한 복구를 수행
- TCP에서 체크섬은 강제사항(UDP에선 선택사항)
- UDP에서와 같은 가상헤더를 포함하여 계산(UDP처럼 가상의 헤더를 앞에 붙이고 TCP헤더를 포함해서 전체적인 내용들을 체크섬)
- 1의 보수 덧셈을 이용해서 나온 결과를 다시 보수를 취하는 방법 사용하여 계산
연결 설정과 해제
연결 설정
- TCP는 3단계 메시지 교환(Three-way handshake)을 통해서 연결설정
- 클라이언트는 연결을 요청하는 SYN 세그먼트를 전송
- 서버는 SYN과 ACK를 포함하는 세그먼트로 응답
- 클라이언트는 ACK를 보냄
연결 해제
- TCP는 연결해제를 위해서 3단계(three-way handshaking)와 4단계(four-way handshaking) 메시지 교환을 제공
- 제어필드의 FIN을 사용하여 연결 해제
- 4단계 메시지교환을 통한 연결해제는 half-close 상태를 만들어 수신은 가능하게 함
- 아직 보낼게 남은 상태에서 남은 것을 다 보내고 나서 연결을 끊기 위함
- 3단계 메시지 교환을 통한 연결해제는 즉시 연결을 종료
흐름 제어
- 송신 TCP가 목적지로 부터 AKC를 수신하기 전에 보낼 수 있는 데이터의 양을 정함
- TCP는 슬라이딩 윈도우 프로토콜(Sliding window protocol)을 이용
- TCP는 바이트 단위로 윈도우 크기(수신 가능한 데이터 양)을 명시
- 윈도우 크기는 시간에 따라서 변할 수 있음
'네트워크' 카테고리의 다른 글
09. 멀티 캐스팅 (0) | 2021.07.24 |
---|---|
08. 패킷 전달과 라우팅 프로토콜 (0) | 2021.07.24 |
07. IP주소 자동할당, 변환과 주소매핑, 에러보고 (0) | 2021.07.24 |
05. 이동통신과 인터넷프로토콜 (0) | 2021.07.24 |
04. 무선 LAN과 네트워크 연결장치 (0) | 2021.07.24 |